DOSではコマンドがある
xcopy /s *.mp3 ..\TEMP2
Ubuntu でこれを実行するにはどうすればよいですか?
cp -r *.mp3 ../TEMP2
残念ながらフィルターのためパスなしですべての mp3 ファイルを再帰的にコピーします*.mp3
。
cp -r *.* ../TEMP2
パスをコピーしますが、mp3ファイルに限定することはできません
rsync を見てみましたが、わかりません。
答え1
Ubuntu のツールの強みは、それらを組み合わせることができることです。次のコマンドは、現在のディレクトリとそのサブディレクトリ内のすべての .mp3 ファイルを検索し、../TEMP2/
パスを保持したままフォルダーにコピーします。
find -iname '*.mp3' -exec install -D {} ../TEMP2/{} \;
find -iname '*.mp3'
.mp3
- (大文字と小文字を区別しない) で終わるすべてのファイルを検索し、-exec
- 一致するたびにコマンドを実行します:install -D {} ../TEMP2/{}
- 一致したファイルを../TEMP/
パスを保持したままコピーします。({}
はファイル名を含むパスに置き換えられます)
\;
--exec
コマンドを終了します
進行状況を取得したい場合は、-ls
コマンドの前に ("list")を追加します-exec
。コマンドの後にも追加できます\;
が、その場合はコピーされた後の名前が表示されます。例:
find -iname '*.mp3' -ls -exec install -D {} ../TEMP2/{} \;
find -iname '*.mp3' -exec install -D {} ../TEMP2/{} \; -ls
答え2
いくつかの選択肢がありますが、残念ながらどれも本当に簡単ではありません...
rsync
rsync -r --include="*/" --include="*.mp3" --exclude="*" --prune-empty-dirs . ../TEMP2
これは、すべてのファイルを除外する ( exclude="*"
) が、すべてのディレクトリ ( ) を調べinclude="*/"
、すべての mp3 ファイル ( ) を含めるように指示しますinclude="*.mp3"
。mp3 ファイルが含まれていないディレクトリをコピーしたくない場合は、さらに--prune-empty-dirs
オプションが必要です。
ジップ
zip -R archive.zip "*.mp3"
unzip -d ../TEMP2 archive.zip && rm archive.zip
最初のコマンドはすべての mp3 ファイルを含むアーカイブを作成し、2 番目のコマンドはコンテンツをターゲット ディレクトリに解凍し、成功した場合はアーカイブ ファイルを削除します。
探す
find . -iname "*.mp3" -exec install -D {} ../TEMP2/{} ";"
../TEMP2
これは、最初にディレクトリ構造を作成した後、すべての mp3 ファイルを検索し、それらをディレクトリ内の対応するパスにコピーします( install -D
)。
すべてをコピーして残りを削除する
これは、必要なファイルが数個しかない場合にのみ意味があります。しないコピーしたい:
cp -r * ../TEMP2
find ../TEMP2 -type f \! -iname '*.mp3' -delete
これにより、すべてがコピーされ、mp3ファイル以外のすべてのファイルが削除されます。