我正在开发一个应该执行以下操作的bash脚本:对于每个以Event_ *开头的目录(在cat eventList中),cd进入目录,如果文件中存在字符串“ZJ.ROT”* .mcp,我想将文件“ROT”复制到另一个目录。简单来说:循环目录:如果该目录中的文件中存在字符串“ZJ.ROT”,则将该目录中的另一个文件输出到单独的目录。
#!/bin/bash
mkdir newdire
for dir in `cat eventList`; do
cd $dir
pwd
if grep "ZJ.KNYN" *.mcp; then
cp "ROT" "newdire"
fi
done
我得到的错误是:
./azim.sh: line 5: cd: Event_2014.11.21.10.10.19.630: No such file or directory
/Users/files/Event_2013.12.01.06.29.57.800
grep: *.mcp: No such file or directory
出于某种原因,这个for循环不会循环遍历每个目录,但它停留在第一个目录Event_2013 ....有关如何实现此代码的任何想法?
答案 0 :(得分:2)
第一次cd
到一个子目录后,您将进入所有未来的循环迭代,因此您的后续cds将会失败,正如您所遇到的那样。您还需要引用变量以及其他问题。试试这个:
pwd="$PWD"
mkdir newdire
while IFS= read -r dir; do
cd "$dir"
grep -Fq "ZJ.KNYN" *.mcp &&
cp "ROT" "${pwd}/newdire"
cd "$pwd"
done < eventList
但当然你实际上并不需要cd:
mkdir newdire
while IFS= read -r dir; do
grep -Fq "ZJ.KNYN" "$dir"/*.mcp &&
cp "${dir}/ROT" newdire
done < eventList
答案 1 :(得分:0)
问题似乎在这里:
var mix = {};
mix.elems = [];
$(".productsearch").each(function (i) {
var input = $(this);
mix.index = i;
mix.elems[i] = { quantity: input.data("quantity"), um: input.data("um"), search: input.data("search") }
});
您应该在if grep "ZJ.KNYN" *.mcp; then
中使用-q
选项来取消输出并检查返回状态,如下所示:
grep
if grep -qF "ZJ.KNYN" *.mcp; then
用于固定字符串搜索。
此外,无需更改循环内的目录。
您的完整脚本可以更好地重写为:
-F