反引号给出的结果与粘贴结果不同

反引号给出的结果与粘贴结果不同

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 。$( ... )

相关内容