一連のサブフォルダー(a
からz
など)があり、それぞれにコマンドを実行する場合(dsmmigrate * &
など)、どのように実行しますか?手動のアプローチは、
cd a
dsmmigrate * &
cd ../b
それは複雑すぎるようですので、もっと簡単なアプローチが必要だと思います。
はい、作業ディレクトリを前後に変更するのは面倒であり、注意しない限り、複雑なスクリプトで非常に奇妙な状況につながる可能性があるため、実際に実行したいことではありません。
単純なコマンドの作業ディレクトリを変更する通常の方法は、cd
を配置し、サブシェルでコマンドを呼び出すことです。サブシェルの作業ディレクトリは変更されますが、サブシェルが独自の環境で実行されているため、変更はスクリプトの残りの部分には引き継がれません。
例:現在の作業ディレクトリ内のすべてのディレクトリ内でmycommand
を実行する:
for d in *; do
if [ -d "$d" ]; then # or: if test -d "$d"; then
( cd "$d" && mycommand )
fi
done
またはあなたの場合、既知のディレクトリa
およびb
を使用します:
for d in a b; do
( cd "$d" && dsmmigrate * & )
done
dsmmigrate
ツールがわからないので、この方法で実行することが正しいかどうかはわかりません。
EDIT:dsmmigrate
tool には-Recursive
国旗:
$ dsmmigrate -Recursive /path
現在のディレクトリがparent_directory
の場合、次のことができます。
for d in [a-z]
do
( cd $d && your-command-here )
done
(
と)
はサブシェルを作成するため、メインスクリプトで現在のディレクトリが変更されることはありません。