我理解所有这些,但当我到达以 开头的第七行时,我就失去了它find
。我不明白-exec cp {}
。我明白这是executing
命令copy
,但我不明白括号{}
在做什么,特别是如果它们是空的?
整个片段来自我正在读的一本书。
# This script prompts to backup files and location
# The files will search on $HOME dir and will only backup files to same $HOME dir.
read -p "Which file types would you like to backup? >>: " file_suffix
read -p "Which directory would you like to backup to? >>: " dir_name
# creates a directory if it does not currently exist
test -d $HOME/$dir_name || mkdir -m 700 $HOME/$dir_name
# search criteria ie .sh . The -path, -prune and -o options are to exclude the back directory from the backup.
find $HOME -path $HOME/$dir_name -prune -o -name "*$file_suffix" -exec cp {} $HOME/$dir_name/ \;
exit 0
答案1
没有{}
特定的含义bash
,但确实意味着某些东西find
。
find . -exec stat {} ";"
将通过对每个文件的一次调用来递归地统计从当前工作目录可访问的每个文件stat
。
find . -exec stat {} "+"
stat
将同时运行多个文件。
{}
您可以通过引用它或使用变量来说服自己它们实际上不是 shell 语法的一部分。
find . -exec stat "{}" ";"
A="{}" find . -exec stat "$A" ";"
将产生与第一个示例相同的输出。
答案2
如果字符串 {} 出现在实用程序名称或参数中的任何位置,则它将被当前文件的路径名(通过“find”找到)替换。因此,在您的示例中,将 {find 找到的文件} 复制到 $HOME/$dir_name/
答案3
它表示命令的结果find
,作为参数传递给exec
:
假设find
命令的结果是x
,那么:
find ..... -exec echo "{}"
将给出输出x
,因为x
是作为参数传递的,并且该参数由 表示{}
。
在您的情况下, find 将给出具有该属性的文件,并且这些文件将由命令-path $HOME/$dir_name -prune -o -name "*$file_suffix"
表示(一个接一个而不是全部一起)。cp
{}