无法获取与shell脚本中的正则表达式匹配的文件的完整列表

时间:2015-05-12 07:08:39

标签: shell

我有一个包含文件列表abc_1.txt abc_2.txt的目录。 我必须解析文件名并对文件进行一些处理

  #shellscript /tmp/log*
  file_list=`ls $1`
  for file_name in $file_list
  do
     # need to do some processing over the file name
     echo $file_name
  done

脚本没有提供正确的输出,即脚本没有为ls cmd提供匹配的通配符文件名。 上述脚本的使用是shellscript /tmp/log*

3 个答案:

答案 0 :(得分:2)

Bash将shellscript /tmp/log/abc*扩展为文件名列表,作为脚本的输入。不需要ls。只是迭代输入。试试这个

for f in $*
do
 echo "Processing $f"
 # do something on $f
done

http://www.cyberciti.biz/faq/bash-loop-over-file/甚至会为您提供更多示例。

答案 1 :(得分:1)

如果你想要没有dir的文件名,你可以使用

if [ ! -d "$*" ]; then
        echo "Usage: $0 dirname"
        exit 1
fi
cd "$*"
find . -type f | cut -c3- | while read file_name; do
        echo "Found ${file_name}"
done

答案 2 :(得分:0)

只需删除通配符“*”,因为它匹配给定路径中的所有文件。删除它只会传递目录路径,您的脚本将打印每个文件