我正在尝试使用bash脚本遍历目录中包含文件名中某个单词的所有文件.
以下脚本循环遍历目录中的所有文件,
cd path/to/directory
for file in *
do
echo $file
done
Run Code Online (Sandbox Code Playgroud)
ls | grep 'my_word'仅提供文件名中包含"my_word"一词的文件.但是我不确定如何用ls替换*脚本中的grep'my_word'.
如果我喜欢这个,
for file in ls | grep 'my_word'
do
echo $file
done
Run Code Online (Sandbox Code Playgroud)
它给我一个错误"语法错误附近意外的令牌'|'".这样做的正确方法是什么?
你应该避免在可能的情况下解析ls.假设您当前目录中没有子目录,通常就可以使用glob:
for file in *foo*; do echo "$file"; done
Run Code Online (Sandbox Code Playgroud)
如果您有一个或多个子目录,则可能需要使用find.例如,对于cat文件:
find . -type f -name "*foo*" | xargs cat
Run Code Online (Sandbox Code Playgroud)
或者,如果您的文件名包含特殊字符,请尝试:
find . -type f -name "*foo*" -print0 | xargs -0 cat
Run Code Online (Sandbox Code Playgroud)
while IFS= read -r myfile; do echo "$myfile"; done < <(find . -type f -name '*foo*')
Run Code Online (Sandbox Code Playgroud)
或者,如果您的文件名包含特殊字符,请尝试:
while IFS= read -r -d '' myfile; do
echo "$myfile"
done < <(find . -type f -name '*foo*' -print0)
Run Code Online (Sandbox Code Playgroud)