1

我怎样才能得到一个命令的结果,比如

# 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

因此,主要是我正在寻找一种方法来从 find 或 locate 中获取这些 X 结果以供后期使用,如上所述。

更新

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

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

4

3 回答 3

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}]}

于 2012-04-18T09:39:14.317 回答
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"
于 2012-04-18T09:45:01.780 回答
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

其余部分使用已发布的内容

于 2012-04-18T11:31:00.110 回答