在使用find -exec移动后,在子文件夹中查找文件,移动到其他目录,并删除子文件夹

时间:2017-06-03 18:19:35

标签: bash find exec

我正在寻找以下内容: 我想在我的目录中的所有子文件夹中搜索带有.m4a的文件。当找到具有此结尾的文件时,我想将其移动到另一个文件夹。但之后我想删除这个子文件夹。我坚持到最后一步。 到目前为止,我有:

    find . -name '*.m4a' -type f -exec mv {} /path/to/storage \;

我不知道如何删除子文件夹,找到了m4a文件。此外,我不想意外删除任何其他文件夹(我的意思是我错误地应用了rm命令。删除我在其中找到m4a文件的子文件夹是可以的。基本上,我不知道如何控制删除,我能否在find命令中添加另一个-exec这个命令,好吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

这样的事应该没问题。

如果您对结果感到满意,可以删除回声以执行实际操作:

find . -name '*.m4a' -type f -exec sh -c 'echo "mv {} /path/to/storage";echo "rm -r "$(dirname {})"" ' \;

请注意,如果/ path / to / storage是您执行find的当前工作工作下的子目录,也将被删除,如下所示:

$ pwd
/home/gv/Desktop/PythonTests/tmp/tmp2
$ find . -name 'test.txt' -exec sh -c 'echo "mv {} /home/gv/Desktop/PythonTests/tmp/tmp2";echo "rm -r "$(dirname {})"" ' \;
mv ./tmp3/test.txt /home/gv/Desktop/PythonTests/tmp/tmp2  #indeed test.txt was in subfolder tmp3 under cwd tmp2
rm -r ./tmp3  #this is good - file moved , tmp3 removed also
mv ./test.txt /home/gv/Desktop/PythonTests/tmp/tmp2  #oops. find returned the result after previous mv , now file is found under tmp2
rm -r .  #tmp2 gone also!