당신이 이름에 공백이나 특수 문자가있는 파일에 대해 걱정할 필요가 있는지 여부에 따라이 문제를 해결하기 위해 몇 가지 방법이 있습니다 후 다른 명령을 구분하는 데 사용 실행합니다.
공백이나 특수 문자가없는 파일 이름 (문자, 숫자, 대시 및 밑줄만으로 구성)이없는 경우 다음은 간단한 해결책입니다. $(command)
을 사용하여 명령을 실행하고 결과를 다른 명령의 인수로 대체 할 수 있습니다. 쉘은 결과를 공백, 탭 또는 개행 문자로 분할하고 for
을 차례로 각 값을 $f
에 할당하고 각 값에 대해 명령을 실행합니다.
for f in $(find . -name myFile)
do
cp something $f
done
당신은 공백이나 탭이있는 경우, 당신은 발견의 -exec
옵션을 사용할 수 있습니다. -exec command args
을 전달하고 {}
을 파일명을 대체 할 위치로두고 인수를 ;
으로 끝내십시오. 쉘이 해석하지 않도록 {}
과 ;
을 인용해야합니다.
때로는 -exec
은 충분하지 않습니다. 예를 들어, this question에서 Bash 매개 변수 확장을 사용하여 파일 이름을 계산하려고했습니다. 이를 수행하려면 -exec bash -c 'your command'
을 전달해야하지만 {}
대체와 함께 인용문 문제가 발생합니다. 이 문제를 해결하려면 (파일 이름에 유효하지 않은) 널 (null) 문자로 구분 된 결과를 인쇄 할 find
에서 -print0
을 사용할 수 있으며, 관이 널 (null)에 매개 변수를 분할하는 while read
루프 :
이
find . -name myFile -print0 | (while read -d $'\0' f; do
cp something "$f"
done)
/home/myuser/myFile 뒤에 {}의 순서를 두 번째 위치로 변경하면됩니다. 감사. –
@ LuisAndrésGarcía, 아, 내가 잘못 생각한 것일 수도 있습니다 - 하나의 파일'/ home/myuser/myFile'을 복사하여 cwd에서'find'에 의해 발견 된'myFile'을 덮어 쓰시겠습니까? –
당신이 맞습니다! :) 찾은 파일의 속성을 나열하는 또 다른 예는 다음과 같습니다. find -exec ls -l {} ';' –