Bash

將大量文件和目錄移動到不同的目錄

  • February 21, 2014

我正在嘗試將以下結構中存在的大量文件移動到 /mnt/originals 但我需要同時維護該結構。我知道 cp 將是一個解決方案,但由於空間限制不能使用 cp 。

/mnt/originals-us/4
/mnt/originals.us/4/0b9
/mnt/originals.us/4/0b8
/mnt/originals.us/4/0b4
/mnt/originals.us/4/0b3
/mnt/originals.us/4/0b9/a62/
/mnt/originals.us/4/0b9/a47/
/mnt/originals.us/4/0b9/f0f/
/mnt/originals.us/4/0b9/a62/aa5/file16.png
/mnt/originals.us/4/0b9/a62/ba1/file1.png
/mnt/originals.us/4/0b9/a47/31f/file3.mov
/mnt/originals.us/4/0b9/f0f/
.
.
.

等等。它是一組相當大的不同文件名和類型的文件。我嘗試了以下但沒有奏效。

mv /mnt/originals-us/ /mnt/originals/ 

但得到以下

mv: inter-device move failed: `/mnt/originals-us/10/0b9/' to `/mnt/originals/10/0b9'; unable to remove target: Is a directory

我還考慮過編寫一個大規模連結的命令,但我認為這也行不通。

這就是我到目前為止所擁有的。

find . -type f -print | rev | cut -d '/' -f1 | rev

這顯然給了我所有的文件名,但我如何將它與第一部分連結起來?

一種選擇是將 rsync 與--remove-source-files

rsync -vr --remove-source-files /mnt/originals-us/ /mnt/originals/

潛在警告:我不知道 rsync 在執行潛在破壞性操作之前如何檢查空間。在一個完美的世界中,rsync 會計算需要多少空間,檢查是否可用,然後中止並警告使用者或(如果空間足夠)執行操作。

編輯:我錯誤地省略了遞歸選項 ( -r),感謝 OP 的提及,現在已修復

引用自:https://unix.stackexchange.com/questions/116302