如何逐一获得像
这样的命令的结果# 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
locate file.txt
所以,主要是我正在寻找一种从查找中获取X结果的方法,或者为了后期使用而逐一查找,如上所述。
是否可以查看查找/定位结果的最常见路径?我的意思是,如果我在/backup/
有2个文件,/home/alex/files/
有2个文件我想设置,或者询问他们是否从最常见的文件夹/backup/
获取所有文件!
这意味着当我有超过X个文件时(例如:10),因为有时候我可以获得数百个结果,而且我不能一个接一个地去!
答案 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
使用已经发布的内容