GNU bash,版本 5.0.17(1)-release (x86_64-pc-linux-gnu)
Ubuntu 20.04.3 LTS
所以,我下载了大约 20 个 7z 文件,我想将它们移动到某个地方,但不是我在下载中已有的以前的 7z 文件。 (顺便说一句,文件名中也有一些空格。)所以我确实喜欢
mv `find -mmin -700 -iname "*.7z" -printf "\"%f\" "` ~/FOLDER/
它应该找到在过去约 11 小时左右修改的所有 7z 文件,并将它们移至 ~/FOLDER/。
它没有移动所有文件,而是给我带来了一堆文件名片段的错误,比如
mv: cannot stat 'Pinball': No such file or directory
我已经尝试过该find
命令本身,它给了我一个看起来合理的文件列表,每个文件都用引号引起来,全部在一行上。我还尝试将命令的输出粘贴find
到 中mv PASTED_HERE ~/FOLDER/
,就像我认为反引号基本上是 DID 一样,并且效果很好。 (我也尝试$()
代替反引号,但我得到了与反引号相同的错误。)出了什么问题?
答案1
引号不是文件名的一部分,因此您不能将它们包含在名称中并期望它起作用。
find -mmin -700 -iname '*.7z' -exec echo mv -v {} ~/FOLDER/ \;
或者(使用 GNU mv
),
find -mmin -700 -iname '*.7z' -exec echo mv -vt ~/FOLDER/ {} +
无论哪种情况,echo
当您对建议的结果感到满意时,请删除。
作为旁注,反引号不再被视为最佳实践。如果您需要将结果视为单个单词,则可以使用双引号代替` ... `
use 。$( ... )