Bash

根據特定條件將文件從一個文件夾移動到另一個文件夾

  • February 8, 2020

我有成千上萬的照片文件夾。無論出於何種原因,他們在導出時創建了幾個這樣的場景:

2019/01/01
2019/01/01 #2

如何編寫可以自動移動文件的 linux 命令(理想情況下可以在 Mac 上執行)

from 
2019/01/01 #2 
to 
2019/01/01

任何幫助,將不勝感激。這需要適用於任何日期並合併內容。我苦苦掙扎的地方是我無法理解如何在沒有 # 的情況下將目錄作為原始格式

for dir in *#2/*; do mv "$dir"/* "${dir}"; done

使用find-exec

find . -type d -name "* #*" -exec bash -O nullglob -c '
 for dir; do
   otherdir=${dir/ #*}
   if [ -d "$otherdir" ]; then
     for file in "$dir"/*; do
       mv -vi "$file" "$otherdir"
     done
     rmdir "$dir" && echo "deleted directory $dir"
   else
     mv -v "$dir" "$otherdir"
   fi
 done
' bash {} +

如果後一個目錄存在,這會將所有文件從 eg 移動2019/01/01 #22019/01/01(如果不存在,#則重命名帶有 的文件夾)。如果2019/01/01 #2其他文件夾中已經存在文件,它會請求移動文件的權限。

移動操作完成後,它會嘗試刪除(現在為空的)文件夾。所有移動/刪除操作都處於詳細模式。

與 for循環nullglob結合使用可確保"$dir"/*在目錄已經為空時不返回任何文件。

引用自:https://serverfault.com/questions/1001937