我想运行一个find
命令并处理它返回的文件,同时还回显所处理的文件的计数,以便让我了解其进度。
现在,我的命令是(作为示例):
COUNT=0\; find . -name '*.*' -exec echo "$COUNT: \c" \; -exec echo {} \;
但结果,我没有得到回显的计数(而且我不知道如何增加它)。我希望它能给我类似的东西:
0: ./FileOne.txt
1: ./FileTwo.txt
...
205: ./FileTwoHundredAndFive.txt
答案1
执行的命令find
是独立的。每个命令-exec
都会启动一个新命令。没有办法将当前计数从一个命令传输到下一个命令,除非将其存储在某个位置(在文件中),这会非常慢。
您可以让 find 每次看到文件时打印一些内容,并将输出通过管道传输到计算输入行数的程序。
find … -print -exec 'the stuff you want to do' | nl
这将在由于缓冲而延迟后打印计数。看关闭管道中的缓冲关闭缓冲时。
stdbuf -oL -eL find … -print -exec 'the stuff you want to do' | nl