-exec 实际上是如何工作的

-exec 实际上是如何工作的

我对命令感到困惑-exec。例如在这种情况下:

find . -type f -name "*.c" -exec cat {} \;>all_c_files.txt

看来我得到了cat file1 file2 file3 ... fileN

在这种情况下:

find . -type f -name "*.txt" -exec cp {} OLD \;

我得到:

`cp file1 OLD`  
`cp file2 OLD`  
`cp file3 OLD`  
...  
`cp fileN OLD`  

类似的情况例如:

find . -type f -name "*.txt" -exec printf "Text file: %s\n" {} \;

似乎要做:

printf "Text file: file1"  
printf "Text file: file2"  
printf "Text file: file3"  
...  
printf "Text file: fileN"  

那么如何exec运作呢?我的意思是,在这些示例中它的行为有所不同,我对吗?

答案1

我想您对cat命令(和 shell 重定向)感到困惑,而不是对命令(和 shell 重定向)感到困惑find

find . -type f -name "*.c" -exec cat {} \; > all_c_files.txt相当于:

(
  cat file1 ;
  cat file2 ;
  cat file3 ;
  ... 
  cat fileN
) > all_c_files.txt

显然,前一个命令和后一个命令具有相同的结果:

cat file1 file2 file3 ... fileN > all_c_files.txt

相关内容