忘记了在同一分区上移动数百万个文件的正确语法

忘记了在同一分区上移动数百万个文件的正确语法

我有一个命令行指令,可以将 100k 的 jpg 移动到同一磁盘/卷/分区上的正确目录,并且不使用 xargs。奇怪的是 jpg 中有空格和多个句点或点。例如:“古怪的 image.45 xyz.001 00.78.jpg”。另一个怪癖是古怪的模式指的是一个集合,因此有几千个这样的 jpg,在最终的 jpg 扩展名之前插入了一组附加数字:“古怪的 image.45 xyz.001 00.78.details_0_34748-836389.jpg。我不确定是谁做出了这台机器的设计决定,但不是我!无论如何,我有一些类似的事情:

for f in ./“wacky image.45 xyz.name.s.00.78”*; do
    mv $f /path/to/destination/;
done

我不确定我错过了什么。

编辑:使用 MacOS 终端应用程序,其行为在很大程度上类似于 BSD。

答案1

for f in ./"wacky image.45 xyz.name.s.00.78"*; do
    mv "$f" /path/to/destination/;
done 

(注意引号)有同样的问题

mv ./"wacky image.45 xyz.name.s.00.78"* /path/to/destination/

他们都是通配符。您需要“数百万”个文件是

find . -iname 'wacky image.45 xyz.name.s.00.78*'  -exec mv "{}"  /path/to/destination/

或者如果你想要一些每个文件的逻辑

while read -r F ; do
    mv "$F"  /path/to/destination/
done < <(find . -iname 'wacky image.45 xyz.name.s.00.78*' )

答案2

Arkadiusz Drabczyk 在上面的“将 $f 放在双引号中:“$f””是正确的。

使用此功能,我可以将 1M+ 文件移动到同一磁盘/卷/分区上的不同目录。我编辑了这个问题,但我也会把它放在这里。我使用的是 MacOS 10.14 和终端应用程序,其大部分行为类似于 BSD。无论好坏,Apple 不再允许在其操作系统上运行 32 位应用程序,因此每个 CLI 工具都是以 64 位编译的。也许这就是允许大型参数列表的原因?

相关内容