Bash에서 빈 중괄호는 무엇을 의미합니까? [복사]

Bash에서 빈 중괄호는 무엇을 의미합니까? [복사]

나는 이 모든 것을 이해하지만 로 시작하는 일곱 번째 줄에 도달하면 그것을 잃어버립니다 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{}

관련 정보