[英]How to copy the top 10 most recent files from one directory to another?
我的html文件駐留在這里:
/home/thinkcode/myfiles/html/
我想將最新的10個文件移動到/home/thinkcode/Test
到目前為止我有這個。 請指正。 我正在尋找一個單行!
ls -lt *.htm | head -10 | awk '{print "cp "$1" "..\Test\$1}' | sh
ls -lt *.htm | head -10 | awk '{print "cp " $9 " ../Test/"$9}' | sh
這是一個不使用ls
的版本。 它應該不易受文件名中的奇怪字符的影響:
find . -maxdepth 1 -type f -name '*.html' -print0
\| xargs -0 stat --printf "%Y\t%n\n"
\| sort -n
\| tail -n 10
\| cut -f 2
\| xargs cp -t ../Test/
我使用find
有幾個原因:
1)如果目錄中的文件太多,bash將會忽略通配符擴展*。
2)使用-print0
參數來find
bash將文件名中的空格擴展為多個標記的問題。
*實際上,bash為其通配符擴展及其環境變量共享內存緩沖區,因此它不是文件名數量的函數,而是文件名和環境變量的總長度。 環境變量太多=>沒有通配符擴展。
編輯:納入@ glennjackman的一些改進。 保持最初使用find
以避免使用可能在大目錄中失敗的通配符擴展。
ls -lt *.html | head -10 | awk '{print $NF}' | xargs -i cp {} DestDir
在上面的示例中, DestDir
是副本的目標目錄。
在xargs之后添加-t
以在執行時查看命令。 即, xargs -i -t cp {} DestDir
。
有關更多信息,請查看xargs命令 。
編輯 :正如@DennisWilliamson所指出的(並且還檢查當前的手冊頁)重新使用-i
選項This option is deprecated; use -I instead.
This option is deprecated; use -I instead.
。
此外,所提供的兩種解決方案都取決於問題中的文件名不包含任何空格或制表符。
cp
似乎理解反向命令。 所以你可以使用像這樣的命令將10個最新文件復制到另一個文件夾,例如/test
:
cp `ls -t *.htm | head -10` /test
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.