很奇怪,之前都沒有這個問題,發生的原因是因為同一時間在處理大量的檔案所造成。
例如,同一個目錄下有大量的 svg 檔案,想把檔案移到 backup 目錄下,使用指令:
mv *.svg backup
居然顯示錯誤,解法:
find . -name "*.svg" -exec mv {} backup \;
同理,如果需要使用 rm 指令,改服用:
find . -name "*.svg" -exec rm {} \;
要拷貝目前資夾下以jpg結尾的文件到backup目錄。
解法1為:
find . -name "*.jpg" | xargs -i cp {} backup
解法2為:
find . -name "*.jpg" -exec cp {} backup \;
上面的解法1 在 macOS 裡會有問題,建議使用解法2 在 linux / mac 上都通用。
其它 cp 、 rm 的指令也會有 Argument list too long 的問題,也可以用類似上述方式解決。
-exec參數後面是指執行其後面的命令,-exec以;為結尾,由於各個系統中分號的意義不同,因此用\進行轉義,即\;,{}會被find命令的結果替換。
上面的指令,過二天就忘了,真的很麻煩,改用 shell script 來解決:
xcp.sh
!/bin/bash
find . -maxdepth 1
-name "" -exec cp {} \;
xrm.sh
!/bin/bash
find . -maxdepth 1
-name "" -exec rm {} \;
xmv.sh
!/bin/bash
find . -maxdepth 1
-name "" -exec mv {} \;
再把上面的 shell script copy 到 /usr/local/bin 裡,就可以隨時地使用。
-maxdepth 1
是因為 find 預設就會進去subfolder, 這實在很令人困擾!