將檔案和資料夾移動到子資料夾

將檔案和資料夾移動到子資料夾

我想將所有文件和資料夾從一個目錄移動到其子資料夾之一。我怎麼做?

我正在使用 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命令。您可以嘗試搜尋目錄中的所有檔案和資料夾並排除子目錄,然後使用findmv命令將找到的所有檔案和資料夾複製到該子目錄。

查看類似的堆疊溢位問題https://stackoverflow.com/questions/4612157/how-to-use-mv-command-to-move-files- except-those-in-a-specific-directory

相關內容