単一レベルのサブディレクトリが多数ある特定のディレクトリで実行されるスクリプトを作成しようとしています。スクリプトは各サブディレクトリにCDを移動し、ディレクトリ内のファイルに対してコマンドを実行してから、CDを介して次のディレクトリに移動し続けます。これを行う最良の方法は何ですか?
答え1
for d in ./*/ ; do (cd "$d" && somecommand); done
答え2
cd
最善の方法はまったく使用しないことです。
find some/dir -type f -execdir somecommand {} \;
execdir
同様exec
ですが、作業ディレクトリが異なります。
-execdir command {} [;|+]
Like -exec, but the specified command is run from the
subdirectory containing the matched file, which is not normally
the directory in which you started find. This a much more
secure method for invoking commands, as it avoids race
conditions during resolution of the paths to the matched files.
POSIXではありません。
答え3
for D in ./*; do
if [ -d "$D" ]; then
cd "$D"
run_something
cd ..
fi
done
答え4
方法1:
for i in `ls -d ./*/`
do
cd "$i"
command
cd ..
done
方法2:
for i in ./*/
do
cd "$i"
command
cd..
done
方法3:
for i in `ls -d ./*/`
do
(cd "$i" && command)
done
これが役に立つことを願っています。すべての順列と組み合わせを試すことができます。
ありがとう:)