私は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番目のオプションはおそらくはるかに高速ですが、インタラクティブな検証を使用しているので、実際には重要ではありません。