Osx
macOS/bash 相當於 mv -t
我正在使用 macOS 並嘗試在 Bash 中執行以下命令:
cd root || exit shopt -s dotglob for d in ./* do if [ -d "$d" ] then find "$d" -type f -exec mv -i -t "$d" {} + find "$d" -mindepth 1 -type d -delete fi done
macOS 中的
mv
命令不允許-t
flag 指定目錄並給出以下錯誤:mv: illegal option --t usage: mv [-f | -i | -n] [-v] source target
如何在 macOS 中執行此操作?
如果沒有
-t
,您必須將目標目錄保留為 . 的最後一個非選項參數mv
。這給了我們兩個選擇:要麼find
將文件名放在目標目錄之前mv
,要麼找到其他可以做同樣事情的東西。所以,要麼:find "$d" -type f -exec mv -i {} "$d" \;
或者:
export d; find "$d" -type f -exec sh -c 'exec mv -i "$@" "$d"' sh {} +
在第一個命令中,
mv
對每個文件執行。在第二個中,sh -c ...
對一批文件執行,然後mv
對整個批次執行。第二個選項可能更快,但由於您使用的是互動式確認,所以它並不重要。