mv -t と同等の macOS/bash

mv -t と同等の macOS/bash

私は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次のエラーを表示します。

mv: illegal option --t
usage: mv [-f | -i | -n] [-v] source target

macOSでこれを行うにはどうすればよいですか?

ベストアンサー1

それ以外の場合は、-tターゲットディレクトリをオプションではなく最後の引数として残す必要がありますmv。これには2つのオプションがあります。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各ファイルに対して実行します。 2番目は、sh -c ...ファイルのバッチに対して実行され、再びバッチ全体mvに対して実行されます。 2番目のオプションはおそらくはるかに高速ですが、インタラクティブな検証を使用しているので、実際には重要ではありません。

おすすめ記事