优化一下上面这段shell代码
时间: 2024-04-29 19:24:28 浏览: 196
```
#!/bin/bash
for file in $(find . -name "*.txt"); do
echo "Processing file: $file"
sed -i 's/old/new/g' $file
done
```
优化后的代码:
```
#!/bin/bash
find . -name "*.txt" -print0 | while IFS= read -r -d '' file; do
echo "Processing file: $file"
sed -i 's/old/new/g' "$file"
done
```
改进说明:
1. 使用 `-print0` 和 `read -r -d ''` 结合,可以正确处理文件名中包含空格或特殊字符的情况;
2. 将 `$file` 放在双引号中,可以避免路径中包含空格或特殊字符时出错。
相关问题
请帮我优化这段 shell 脚本 python main.py dir1/dir2/cfg2 dir5/dir6/file python main.py dir1/dir3/cfg3 dir5/dir7/file python main.py dir1/dir4/cfg4 dir5/dir8/file
同样地,您可以使用循环来遍历这三行代码并将相同的部分提取出来,放在循环外面,这样可以使脚本更加简洁。
以下是一个示例脚本:
```
#!/bin/bash
dirs1=("dir1/dir2/cfg2" "dir1/dir3/cfg3" "dir1/dir4/cfg4")
dirs2=("dir5/dir6/file" "dir5/dir7/file" "dir5/dir8/file")
for i in {0..2}
do
cmd="python main.py ${dirs1[$i]} ${dirs2[$i]}"
# 这里可以根据您的需求选择将命令打印出来或直接执行
echo $cmd
# eval $cmd # 执行命令
done
```
这里使用了 Bash 数组来存储 `dirs1` 和 `dirs2` 中的元素,然后使用循环遍历数组中的元素,并将它们拼接到 `python main.py` 命令中。注意,这里使用了 `${dirs1[$i]}` 和 `${dirs2[$i]}` 这样的语法来获取数组中的元素。
另外,您可以根据需要将 `echo $cmd` 改为 `eval $cmd` 来执行命令。
阅读全文