我想將所有文件和資料夾從一個目錄移動到其子資料夾之一。我怎麼做?
我正在使用 BusyBox 和 linux。
前任:
將所有文件和資料夾/my/path/
移至/my/path/subfolder/.
複製,然後刪除的解決方案是不經濟的。
謝謝。
答案1
mv * subfolder
當然,它將無法將“子資料夾”目錄移動到自身中,但其他所有內容都會移動
答案2
使用*
(由 shell 擴展)的解決方案不適用於/my/path/
.在這種情況下你會得到:
argument list too long
這種方法不使用*
:
cd /my/path/ &&
find . -mindepth 1 -maxdepth 1 ! -name subfolder -exec mv -t subfolder/ {} +
不幸的是-mindepth
和-maxdepth
的選項find
不符合 POSIX 標準;我認為-t
這兩個選項都不mv
是。
這個變體應該滿足 POSIX:
cd /my/path/ &&
find . ! -name . -prune ! -name subfolder -exec mv {} subfolder/ \;
(我改編了這個 Unix & Linux SE 答案)。遺憾的是,它需要mv
找到每個對象,因此速度很慢。
快速替代方法,只要您可以重新建立目錄(最初既不/my/path/subfolder/
也不/my/subfolder/
應該存在):
- 重新命名
path/
為subfolder/
, - 重新創建
path/
, - 搬進。
subfolder/
path/
請注意,基於 inode 的檔案系統應該同樣快,無論path/
.代碼:
cd /my/ &&
test ! -e subfolder/ && mv path/ subfolder/ &&
mkdir path/ &&
mv subfolder/ path/
在本例中,我使用了&&
很多內容來強調如果任何步驟失敗,則該過程應該中止。然而,如果您需要path/
或subfolder/
擁有非預設權限、所有權等,這種方法會很不方便。
答案3
最簡單的方法是:
mv !(subfolder) subfolder
'!表示 NOT,類似於程式語言,mv 會將子資料夾以外的所有檔案和資料夾移到所需的子資料夾中。
此處描述了移動隱藏資料夾和點資料夾等其他操作:https://askubuntu.com/questions/91740/how-to-move-all-files-in-current-folder-to-subfolder
答案4
您可能想查看該mv
命令。您可以嘗試搜尋目錄中的所有檔案和資料夾並排除子目錄,然後使用find
該mv
命令將找到的所有檔案和資料夾複製到該子目錄。