通过find / locate获得结果

时间:2012-04-18 09:03:33

标签: linux bash scripting locate

如何逐一获得像

这样的命令的结果
# locate file.txt
/home/alex/file.txt
/backup/file.txt

我想要做的是制作一个交互式脚本,在哪里询问:Which of the following files would you like to copy/recover? [1],[2]:

示例:

filetorecover.txt
_________________
   file.txt
   file1.txt
   ...

./recover filestorecover.txt /home/alex/data/
file.txt could not be located at /home/alex/data, but it was locate here:
[1] /home/alex/files/
[2] /backup/file.txt
  • filestorecover =>是包含要查找的文件的文件
  • / home / alex / files / =>是要查找的主文件夹,如果文件不在那里,请执行locate file.txt

所以,主要是我正在寻找一种从查找中获取X结果的方法,或者为了后期使用而逐一查找,如上所述。

更新

是否可以查看查找/定位结果的最常见路径?我的意思是,如果我在/backup/有2个文件,/home/alex/files/有2个文件我想设置,或者询问他们是否从最常见的文件夹/backup/获取所有文件!

这意味着当我有超过X个文件时(例如:10),因为有时候我可以获得数百个结果,而且我不能一个接一个地去!

3 个答案:

答案 0 :(得分:2)

如果您使用的是bash,则可以使用内置数组,如:

# Get all the files
files=`find . -name "file.txt"`
# Put them into an array
declare -a afiles
afiles=( ${files} )

# Output filenames
for (( i = 0; i < ${#afiles[@]}; i += 1 ));
do
    printf "[%d] %s\n" ${i} ${afiles[$i]}
done

(声明不是必要的,但恕我直言,这是一个很好的评论,说afiles是一个数组。)

使用数组的优势在于,您可以在用户使用${afiles[${number}]}输入一些数字后访问文件名。

答案 1 :(得分:1)

我使用awk并阅读。

# list of files in temp file
choices=$(mktemp -t choices.XXXXX)
find . -name "file.txt") > $choices

# choices with number prefix
cat $choices | awk '{print "[" NR "]" $0}'

# prompt
echo "Choose one"
read num

# find choice
choice=$( cat $choices | awk "{if (NR==$num){print \$0}}" )
echo "You choose $choice"

答案 2 :(得分:1)

供您更新

#paths in order
find . -name '*.txt' | awk '{gsub(/\/[^/]*$/,"");path[$0]+=1} END {for (i in path) print path[i]" "i}' | sort -rg | cut -d ' ' -f 2

使用已经发布的内容