나는 이 모든 것을 이해하지만 로 시작하는 일곱 번째 줄에 도달하면 그것을 잃어버립니다 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
여러 파일이 동시에 실행됩니다.
{}
이를 인용하거나 변수를 사용하여 실제로 쉘 구문의 일부가 아니라는 것을 스스로 확신할 수 있습니다.
find . -exec stat "{}" ";"
A="{}" find . -exec stat "$A" ";"
첫 번째 예와 동일한 출력이 생성됩니다.
답변2
문자열 {}이 유틸리티 이름이나 인수에 나타나면 현재 파일의 경로 이름("find"를 통해 검색됨)으로 대체됩니다. 따라서 귀하의 예에서 {findfound}는 $HOME/$dir_name/에 복사됩니다.
답변3
find
이는 다음에 대한 인수로 전달된 명령의 결과를 나타냅니다 exec
.
find
명령의 결과가 다음과 같다고 가정 x
하면 다음과 같습니다.
find ..... -exec echo "{}"
x
이 매개변수로 전달 되고 x
매개변수가 로 표시되므로 출력이 제공됩니다 {}
.
귀하의 경우 find는 해당 속성을 가진 파일을 제공하며 이러한 파일은 -path $HOME/$dir_name -prune -o -name "*$file_suffix"
명령으로 표시됩니다(모두가 아닌 하나씩).cp
{}