![忘记了在同一分区上移动数百万个文件的正确语法](https://linux22.com/image/154043/%E5%BF%98%E8%AE%B0%E4%BA%86%E5%9C%A8%E5%90%8C%E4%B8%80%E5%88%86%E5%8C%BA%E4%B8%8A%E7%A7%BB%E5%8A%A8%E6%95%B0%E7%99%BE%E4%B8%87%E4%B8%AA%E6%96%87%E4%BB%B6%E7%9A%84%E6%AD%A3%E7%A1%AE%E8%AF%AD%E6%B3%95.png)
我有一个命令行指令,可以将 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 位编译的。也许这就是允许大型参数列表的原因?