特定のディレクトリ構造をコピーしてコピーするファイルの数をランダムに選択するエレガントで迅速な方法はありますか?たとえば、次のような構造があります。
--MainDir
--SubDir1
--SubSubDir1
--file1
--file2
--...
--fileN
--...
--SubSubDirN
--file1
--file2
--...
--fileN
--...
フォルダ構造全体をコピーしたいが、各SubSubDirの{files1-filesN}から特定の数のランダムファイルのみを選択してコピーします。
ベストアンサー1
タグ付けしたので、linux
私はGNUユーティリティを使います。
ディレクトリ構造をから$src
次にコピーします$dest
。
find "$src" -type d -print0 | cpio -padmv0 "$dest"
$nfile
また、次の各リーフディレクトリから任意のファイルサンプルをコピーします$src
。
find "$src" -type d -links 2 -exec \
sh -c 'find "$1" -type f -print0 | shuf -z -n "$2"' sh {} "$nfiles" \; | \
cpio -padmv0 "$dest"
ここで、最初はfind
リーフディレクトリ()を見つけ、-links 2
2番目はfind
各サブディレクトリでファイルを探します。 shuf
任意のファイルサンプルを選択し、最後にcpio
コピーします。