12

すべての私のhtmlファイルはここにあります:

/home/thinkcode/myfiles/html/

最新の10個のファイルをに移動したい/home/thinkcode/Test

私はこれまでにこれを持っています。訂正してください。ワンライナーを探しています!

ls -lt *.htm | head -10 | awk '{print "cp "$1" "..\Test\$1}' | sh
4

4 に答える 4

11
ls -lt *.htm | head -10 | awk '{print "cp " $9 " ../Test/"$9}' | sh
于 2012-05-15T15:59:53.750 に答える
6

こちらはを使用しないバージョン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大きなディレクトリで失敗する可能性のあるワイルドカード拡張の使用を回避するために、の最初の使用を維持しました。

于 2012-05-15T16:43:32.523 に答える
6

cpバックティックコマンドを理解しているようです。したがって、このようなコマンドを使用して、最新の10個のファイルを次のような別のフォルダーにコピーできます/test

cp `ls -t *.htm | head -10` /test
于 2019-02-27T17:11:28.837 に答える
5
ls -lt *.html | head -10 | awk '{print $NF}' | xargs -i cp {} DestDir

上記の例DestDirでは、コピーの宛先ディレクトリです。

-txargsの後に追加して、実行中のコマンドを確認します。つまり、 xargs -i -t cp {} DestDir

詳細については、xargsコマンドを確認してください。

編集:@DennisWilliamsonによって指摘されたように(そして現在のマニュアルページもチェックして)、-iオプションを再確認してくださいThis option is deprecated; use -I instead.

また、提示された両方の解決策は、質問のファイル名に依存し、空白やタブは含まれていません。

于 2012-05-15T15:55:57.790 に答える