簡體   English   中英

如何將前10個最新文件從一個目錄復制到另一個目錄?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM