Osx

macOS/bash 相當於 mv -t

  • July 26, 2019

我正在使用 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命令不允許-tflag 指定目錄並給出以下錯誤:

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對整個批次執行。第二個選項可能更快,但由於您使用的是互動式確認,所以它並不重要。

引用自:https://unix.stackexchange.com/questions/532337