ディレクトリ内の最大5つのファイルを自分のファイルにコピーしようとしていますpwd
。cp 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]'