我有一个包含文件列表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*
答案 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)
只需删除通配符“*”,因为它匹配给定路径中的所有文件。删除它只会传递目录路径,您的脚本将打印每个文件