Bash
根據特定條件將文件從一個文件夾移動到另一個文件夾
我有成千上萬的照片文件夾。無論出於何種原因,他們在導出時創建了幾個這樣的場景:
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 #2
到2019/01/01
(如果不存在,#
則重命名帶有 的文件夾)。如果2019/01/01 #2
其他文件夾中已經存在文件,它會請求移動文件的權限。移動操作完成後,它會嘗試刪除(現在為空的)文件夾。所有移動/刪除操作都處於詳細模式。
與 for循環
nullglob
結合使用可確保"$dir"/*
在目錄已經為空時不返回任何文件。