如何使用bash脚本在文件名中包含某个单词的目录中循环浏览文件?

如何使用bash脚本在文件名中包含某个单词的目录中循环浏览文件?,bash,loops,Bash,Loops,我正在尝试使用bash脚本循环遍历目录中包含文件名中某个单词的所有文件 下面的脚本循环遍历目录中的所有文件 cd path/to/directory for file in * do echo $file done ls | grep'my\u word'只提供文件名中有'my\u word'一词的文件。但是,我不确定如何在脚本中将*替换为ls | grep“my_word” 如果我真的喜欢这个 for file in ls | grep 'my_word' do echo $fil

我正在尝试使用bash脚本循环遍历目录中包含文件名中某个单词的所有文件

下面的脚本循环遍历目录中的所有文件

cd path/to/directory

for file in *
do
  echo $file
done
ls | grep'my\u word'
只提供文件名中有'my\u word'一词的文件。但是,我不确定如何在脚本中将*替换为ls | grep“my_word”

如果我真的喜欢这个

for file in ls | grep 'my_word'
do
  echo $file
done 
它给了我一个错误“意外标记`|'附近的语法错误”。正确的方法是什么?

如果可能,您应该这样做。假设当前目录中没有子目录,则glob通常就足够了:

for file in *foo*; do echo "$file"; done

如果您有一个或多个子目录,则可能需要使用
find
。例如,要
cat
文件:

find . -type f -name "*foo*" | xargs cat
或者,如果文件名包含特殊字符,请尝试:

find . -type f -name "*foo*" -print0 | xargs -0 cat
while IFS= read -r -d '' myfile; do
  echo "$myfile"
done < <(find . -type f -name '*foo*' -print0)

或者,您可以使用和:


而IFS=read-r myfile;不回显“$myfile”;好的,第一个有用。如何在for循环中使用第二个?这就是我不知道的。我想将函数result替换为*.file=
find-键入f-name“*my_word*”| xargs cat
并在$files中为文件工作!谢谢@SenthilKumar:很高兴我能帮上忙:-)@Steve不解析--
ls
是安全问题吗?file/dir名称可能是一个将所有内容发送到遗忘的命令?@t0mgs:我不会把它称为安全问题。解析任何输入时都存在这些问题。只要有可能,就应该避免解析
ls
,因为输出并不总是可信的。正确的语法应该是
for file in$(ls | grep'my_word');做
,但使用
查找或glob`仍然是正确的方法。是的,谢谢,后来在steve的回答的帮助下发现了这一点:)
while IFS= read -r -d '' myfile; do
  echo "$myfile"
done < <(find . -type f -name '*foo*' -print0)