DOS xcopy コマンドの代替

DOS xcopy コマンドの代替

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ファイル以外のすべてのファイルが削除されます。

関連情報