如何打印找到的文件的位置数

时间:2015-07-12 02:39:52

标签: shell

提示用户输入文件名,不带路径(例如: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

但事情是最后,我需要“打印找到该文件的位置数” 帮我解决这个问题

3 个答案:

答案 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