Bash
如何將包含字元串的所有子文件夾移動到新目錄,包括其超級目錄
我一直試圖弄清楚這一點。這是我的文件的範例:
~/download/Video/CE/ ~/download/Video/CE/153 ~/download/Video/CE/153/2022-03-04 ~/download/Video/CE/153/2022-03-05 ~/download/Video/CE/281 ~/download/Video/CE/281/2022-03-04 ~/download/Video/CE/281/2022-03-05 ~/download/Video/GA/ ~/download/Video/GA/154 ~/download/Video/GA/154/2022-03-04 ~/download/Video/GA/154/2022-03-05 ~/download/Video/GA/615 ~/download/Video/GA/615/2022-03-04 ~/download/Video/GA/615/2022-03-05 ...etc
/download/Video 中有幾十個文件夾,/download/video/*/ 中有幾百個文件夾
我正在嘗試將所有包含“2022-03-04”的文件夾及其所有內容移動到一個新目錄中。我想要的結果是:
/mnt/d/archive/Video/CE/153/2022-03-04 /mnt/d/archive/Video/CE/281/2022-03-04 /mnt/d/archive/Video/GA/154/2022-03-04 ...etc
我嘗試了各種方法,但我最大的問題是我不能簡單地將影片文件夾移動到 /mnt/d/archive,因為我想將 2022-03-05 文件夾(和超級目錄)保留在主驅動器上。
這是我迄今為止嘗試過的:
cd ~/download/Video/CE; for subdir in *; do mv $subdir/2022-03-04 /mnt/d/archive/Video/CE/$subdir/; done;
^ 然後複製並粘貼 GA 的程式碼和 /Video/ 中的所有其他子目錄
這創建了以下內容:
/mnt/d/archive/Video/CE/153/file.mp4 /mnt/d/archive/Video/CE/153/file2.mp4 /mnt/d/archive/Video/CE/281/file.mp4 ...etc
這很好,除了它不複製“2022-03-04”文件夾本身。我需要 2022-03-04 文件夾。所以我嘗試了這段程式碼:
cd ~/download/Video/CE; for subdir in *; do mv $subdir/2022-03-04 ~/mnt/d/archive/Video/CE/$subdir/2022-03-04; done;
但是,現在我遇到了另一個問題。這次沒有複製任何文件夾或文件。我只是收到“沒有這樣的文件或目錄”錯誤。
有任何想法嗎?
我的選擇是 tar 因為它很快。
(cd ~/download/Video && find . -type d -name 2022-03-04 | tar -T - -cpf - --remove-files | tar -C "/mnt/d/archive/Video/" -xpf -)
如果我正確理解你的問題,這樣的事情應該可以工作:
cd ~/download/Video for i in $(find * -type d -name '2022-03-04'); do mkdir -p /mnt/d/archive/Video/"$i" mv "$i"/* /mnt/d/archive/Video/"$i" && rm -r "$i" done
這將:
- 查找所有名為“2022-03-04”的目錄。
- 根據需要在存檔位置重新創建目錄樹。
- 將‘2022-03-04’的內容移動到對應的歸檔目錄下,去掉原來的‘2022-03-04’目錄。
(標準免責聲明,如果文件名有奇怪的字元,這將中斷)