Scripting

如何僅查找和複製主目錄下的前 100 個 .jpg 文件,包括其中的所有子目錄?

  • September 16, 2019

我編碼如下:

$ find . -maxdepth 1 -name '*.jpg' | head -n 100 | xargs -0 {} cp {} /home/rachael/backup

錯誤顯示:

xargs: {}: No such file or directory

我的程式碼有什麼問題,如何修復?

有幾件事:

  1. 您的命令中缺少 a-Ixargs告訴它{}要用於什麼
  2. -0告訴期望以xargs空分隔的輸入,但您傳遞的是換行符分隔的輸入

所以

find . -maxdepth 1 -name '*.jpg' -print0 | head -zn 100 | xargs -0 -I{} cp {} /home/rachael/backup

如果您有 GNU 版本cp,您可能想要使用替代形式

find . -maxdepth 1 -name '*.jpg' -print0 | head -zn 100 | xargs -0 cp -t /home/rachael/backup

steeldriver 查明了您的命令的一些問題,但我只是想使用zshshell 添加一個更短的解決方案(因為問題不是特定於任何一個 shell):

cp -- *.jpg(.[1,100]) ~rachel/backup

這將複製目前目錄中匹配 globbing 模式的前 100 個(按字典順序)正常文件*.jpg

對於按修改時間戳記的 100 個最舊的文件,使用*.jpg(.Om[1,100]),並使用小寫o而不是O獲取最近修改的 100 個文件。使用n代替Om 來獲得文件名的數字排序,並添加D以匹配隱藏的名稱。

引用自:https://unix.stackexchange.com/questions/541934