ディレクトリにあるn個の大きなファイルを現在のディレクトリにコピーします。

ディレクトリにあるn個の大きなファイルを現在のディレクトリにコピーします。

ディレクトリ内の最大5つのファイルを自分のファイルにコピーしようとしていますpwdcp specific/directory$(ls -S specific/directory | head -n) ./最初のファイルをコピーしてcannot stat作成し続けると、リスト内の残りのファイルに対してエラーが発生します。

パイプラインが最初の項目では機能しますが、残りの項目では失敗するのはなぜですか?

ベストアンサー1

ノート私のすべてのソリューションはファイルのみ、要求に応じて、あらゆる種類のファイルを処理できます。
(特殊文字も同様)

使いたいならls -S

正しい方法で実行してください。

ls --zero -S | head -z -n5 | xargs -r0 cp -t ./other/dir --

最近リクエストしましたGNU coreutils

coreutils 9.1-1ここで。

もう一つの方法はusebashおよび最近GNU findです。

findutils 4.9.0-4ここで。

に基づいてここ:

shopt -s nullglob
cd specific/directory/ || exit
print0 () { 
    [ "$#" -eq 0 ] || printf '%s\0' "$@"
}
readarray -td '' files < <(
    print0 * |
    find -files0-from - -maxdepth 0 -type f -printf '%b\t%p\0' |
    sort -rzn |
    cut -zf2 -
) 
cp -av -- "${files[@]:0:5}" "$OLDPWD"/
  • ${files[@]:0:5}最初の5つの要素に拡張文書0以上のキーを持つ配列。

以前のツールでは、Perlすべてのシェルを介して

perl -e 'rename($_, "./other/dir/$_") for ((sort { -s $b <=> -s $a } <*>))[0..4]'

おすすめ記事