アル私のhtmlファイルはここに常駐:最新の上位10個のファイルを1つのディレクトリから別のディレクトリにコピーする方法は?
/home/thinkcode/myfiles/html/
私は私がこれまでにこれを持って/home/thinkcode/Test
に、最新の10個のファイルを移動します。私を修正してください。私は1ライナーを探しています!
ls -lt *.htm | head -10 | awk '{print "cp "$1" "..\Test\$1}' | sh
アル私のhtmlファイルはここに常駐:最新の上位10個のファイルを1つのディレクトリから別のディレクトリにコピーする方法は?
/home/thinkcode/myfiles/html/
私は私がこれまでにこれを持って/home/thinkcode/Test
に、最新の10個のファイルを移動します。私を修正してください。私は1ライナーを探しています!
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'は、特殊文字を含むファイル名をリストするのは悪いことです。また、 'ls -l'の出力を解析するのは危険です。すべてのファイルを統計し、結果を日付順にソートする小さなperlスクリプトを書く方がよいでしょう。 'ls'を使わなければならない場合は、少なくとも' -l'引数を省略してください... 'ls -t * .html |ヘッド-10 'も同様に機能します。 –
ls -lt *.html | head -10 | awk '{print $NF}' | xargs -i cp {} DestDir
上記の例DestDir
でコピー先ディレクトリです。
xargsの後に-t
を追加すると、実行時にコマンドが表示されます。すなわち、xargs -i -t cp {} DestDir
。
詳細については、xargs commandを参照してください。
EDIT:@DennisWilliamsonで指摘したように(とも現在のmanページを確認するには)-i
オプションThis option is deprecated; use -I instead.
を再度。
また、質問のファイル名に応じて表示される解決策はどちらも、空白やタブが含まれていません。
ここには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)find
への引数を-print0
とすると、ファイル名の空白を複数のトークンに拡張するbashの問題が回避されます。
*実際には、bashはワイルドカード展開用のメモリバッファとその環境変数を共有しているため、厳密にはファイル名の数ではなく、ファイル名と環境変数の合計長です。環境変数が多すぎます=>ワイルドカードは展開されません。
編集:@ glennjackmanの改良のいくつかが組み込まれています。大きなディレクトリで失敗する可能性のあるワイルドカード拡張の使用を避けるために、最初にfind
を使用しないようにしてください。
lsを使用しない場合は+1。もう少し簡単にできます: 'stat -c"%Y \ t%n "* .html |ソート-n |テール-10 |カット-d "" -f 2- | xargs cp -t ../ Test' –
@glennjackman:貼り付けたときに印刷されるタブ文字の切り取りですか? – ToolmakerSteve
良い点。 'cut -d $ '\ t' ...' –
'xargs'を使って' awk' + 'sh'(醜い感じ)を避けたり、' find ... -exec'を使って1つのコマンドだけ実行することができます。 – KurzedMetal
私はfindを行うことができましたが、awkを使って同じことをする方法が不思議でした! – ThinkCode
[BashFAQ/003](http://mywiki.wooledge.org/BashFAQ/003)および[BashFAQ/099](http://mywiki.wooledge.org/BashFAQ/099)を参照してください。 –