提示用户输入文件名,不带路径(例如:xyz.out) - 使用find命令,提供文件的完整路径 - 最后,“打印该文件的位置数” - 如果找不到,则显示“未找到
”这是我的脚本
#! /bin /bash
echo "please enter your file name"
read filename
if [ -f $filename ];
then
echo "file $filename found"
find $PWD -type f | grep $filename
#find "$(cd ..; pwd)" -name $filename
else
echo "file $filename was not found"
fi
但事情是最后,我需要“打印找到该文件的位置数” 帮我解决这个问题
答案 0 :(得分:1)
这样的事情来计算:
a123
答案 1 :(得分:0)
这应该有效:
find "$PWD" -type f -name "$fname" |grep "" -c
答案 2 :(得分:0)
在尝试保持尽可能短的时候,使用Posix shell的一种方法是填充一个临时文件,其中包含find
返回的文件名,cat
文件以提供输出,以及使用wc
提供行数(注意:您使用自己的模式而不是下面显示的"*cmpf*"
):
$ find . -name "*cmpf*" -printf "%P\n" >tmp; cat tmp; c=$(wc -l <tmp); \
rm tmp; printf "[%s] files found\n" $c
cmpf1f2.c
cmpf1f2_2.c
bin/cmpf1f2_2
bin/cmpf1f2
snip/cmpf1f2_notes.txt
cmpf1f2_for.c
[6] files found
如果bash可用,另一种方法是将匹配的文件读入数组,然后使用元素数作为计数。例如:
$ a=( $(find . -name "*cmpf*" -printf "%P\n") ); printf "%s\n" ${a[@]}; \
printf -- "--\n'%s' files found.\n" ${#a[@]}
cmpf1f2.c
cmpf1f2_2.c
bin/cmpf1f2_2
bin/cmpf1f2
snip/cmpf1f2_notes.txt
cmpf1f2_for.c
--
'6' files found.
这两种方法都为您提供了它们所在的文件和目录以及返回的文件数。
注意:如果您希望./
在每个文件和目录名称之前,请使用%p
格式代替上面的%P
。