答え1
ここでは、現在のディレクトリで見つかった最初の1000ファイルを$destdir
。find
$ find . -maxdepth 1 -type f |head -1000|xargs cp -t "$destdir"
cp
forのGNU実装、つまりfor-t
のGNU互換バージョンが必要です。また、ファイルパスにスペース、改行、引用符、またはバックスラッシュ(または無効な文字または一部の実装では255バイトより長い)が含まれていないとします。find
-maxdepth
xargs
編集する:スペース、改行、引用符などを含むファイル名を処理するには、nullで終わる行を使用する必要があります(バージョンに対応するhead
オプション-z
があると仮定)。
find . -maxdepth 1 -type f -print0 | head -z -n 1000 | xargs -0 -r -- cp -t "$destdir" --
答え2
純粋なシェルソリューション(cp
複数回呼び出される)
N=1000;
for i in "${srcdir}"/*; do
[ "$((N--))" = 0 ] && break
cp -t "${dstdir}" -- "$i"
done
これでから$N
ファイルの最大数がコピーされます。ドットで始まるファイルは省略されます。 (私が知る限り、選択したファイルセットが決定的であるという保証はありません。)$srcdir
$dstdir
答え3
ひどい内容は次のとおりです。
perl -MFile::Copy -e 'opendir(DIR,$ARGV[0]);$n=1000; (-f $_) && copy($_,"$ARGV[1]/$_") while($n-- && readdir(DIR))
シェルベースのソリューションを破損する傾向がある空白、引用符などを含むファイルで動作します($ IFSツイストがありません)。もちろん、ファイル名が正常な場合、シェルに問題はありません。
編集:ファイルのみコピーする確認機能を追加しました。