Bash
將大量文件和目錄移動到不同的目錄
我正在嘗試將以下結構中存在的大量文件移動到 /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 的提及,現在已修復