Sup*_*ing 5 shell wildcards files
如果您有一系列子文件夹(例如 from ato z)并且想对每个子文件夹(例如)运行一个命令,dsmmigrate * &您会怎么做?手动方法是,
cd a
dsmmigrate * &
cd ../b
Run Code Online (Sandbox Code Playgroud)
这看起来太复杂了,所以我相信一定有更简单的方法。
是的,来回更改工作目录很麻烦,而且不是您真正想要做的,因为除非您小心,否则在更复杂的脚本中可能会导致极其奇怪的情况。
更改简单命令的工作目录的常用方法是将命令的cd和 调用放在子 shell 中。子 shell 的工作目录将更改,但更改不会转移到脚本的其余部分,因为子 shell 在其自己的环境中执行。
示例:mycommand在当前工作目录中的所有目录中执行:
for d in *; do
if [ -d "$d" ]; then # or: if test -d "$d"; then
( cd "$d" && mycommand )
fi
done
Run Code Online (Sandbox Code Playgroud)
或者在您的情况下,使用已知目录a和b:
for d in a b; do
( cd "$d" && dsmmigrate * & )
done
Run Code Online (Sandbox Code Playgroud)
我不知道这个dsmmigrate工具,所以我不能说这样运行它是否正确。
编辑:事实证明该dsmmigrate工具有一个-Recursive标志:
$ dsmmigrate -Recursive /path
Run Code Online (Sandbox Code Playgroud)
当当前目录为:时,您可以执行以下操作parent_directory:
for d in [a-z]
do
( cd $d && your-command-here )
done
Run Code Online (Sandbox Code Playgroud)
并创建一个子 shell,因此主脚本中(的)当前目录不会更改。
| 归档时间: |
|
| 查看次数: |
9394 次 |
| 最近记录: |