最初のn個のファイルを別のディレクトリにコピーする

最初のn個のファイルを別のディレクトリにコピーする

重複の可能性:
何千ものファイルを含むフォルダから100個のファイルを移動するには?

あるディレクトリから別のディレクトリに最初の1000ファイルだけをコピーできますか?

事前にありがとう

答え1

ここでは、現在のディレクトリで見つかった最初の1000ファイルを$destdirfind

$ find . -maxdepth 1 -type f |head -1000|xargs cp -t "$destdir"

cpforのGNU実装、つまりfor-tのGNU互換バージョンが必要です。また、ファイルパスにスペース、改行、引用符、またはバックスラッシュ(または無効な文字または一部の実装では255バイトより長い)が含まれていないとします。find-maxdepthxargs

編集する:スペース、改行、引用符などを含むファイル名を処理するには、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ツイストがありません)。もちろん、ファイル名が正常な場合、シェルに問題はありません。

編集:ファイルのみコピーする確認機能を追加しました。

関連情報