替換 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 -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 檔案的存檔,第二個命令將內容解壓縮到目標目錄並刪除存檔檔案(如果成功)。

尋找

find . -iname "*.mp3" -exec install -D {} ../TEMP2/{} ";"

../TEMP2首先建立目錄結構後(install -D),這將找到所有 mp3 檔案並將它們複製到目錄中相應的路徑。

全部複製並刪除其餘的

只有當您只有幾個文件時,這才有意義想要複製:

cp -r * ../TEMP2
find ../TEMP2 -type f \! -iname '*.mp3' -delete

這會複製所有內容,然後刪除所有非 mp3 文件

相關內容