-exec 드라이런을 찾으시겠습니까?

-exec 드라이런을 찾으시겠습니까?

find . -exec somecommand {} \;실제로 명령을 실행하지 않고도 a 를 바꾼 결과가 무엇인지 확인할 수 있는 방법이 있습니까? 테스트 실행(또는 테스트 실행 또는 인쇄)을 좋아하시나요?

예를 들어 다음과 같은 파일 구조가 있다고 가정해 보겠습니다.

/a/1.txt
/a/2.txt
/a/b/3.txt

find . type f -exec rm {} \;출력이 stdout으로 인쇄되지만 실행되지 않도록 디렉터리 내 에서 a테스트 하는 방법이 있습니까? 예:

rm 1.txt
rm 2.txt
rm b/3.txt

고쳐 쓰다 참고: rm이것은 단지 샘플 명령일 뿐이며 일반적인 경우에 관심이 있습니다.

답변1

echo rm대신 달릴 수 있어요rm

find . type f -exec echo rm {} \;

또한 발견된 파일을 삭제하는 옵션이 find있습니다 .-delete

답변2

특히 다음과 같은 rm작업은 필요하지 않습니다 -exec. list를 실행한 find . -type f다음 -delete이전 명령으로 나열된 파일을 삭제하려면 추가하세요(분명히 일치하는 파일이 동시에 생성/삭제되는 것을 허용하지 않음).

또한 이와 같이 인수 개수에 관계없이 사용하는 명령의 경우 가능한 한 적은 수의 명령을 실행 하도록 rm대체해야 합니다 .\;+

답변3

이것은 약간 복잡하지만 사용된 방법과 달리 echo아래 출력 코드는 셸에서 실행할 수 있으며 파일 이름에 따옴표, 공백, 셸 메타 문자 등이 포함되어 있어도 변경 없이 올바른 결과를 얻을 수 있습니다.

printcmd() { printf '%q ' "$@"; printf '\n'; }

find . -exec bash -c "$(declare -f printcmd); "'printcmd "$@"' _ \
  somecommand {} \;

매개변수 앞에 추가하는 문자열은 -exec바로 그 뒤에 bash -c "$(declare -f printcmd); "'printcmd "$@"' _있는 $(declare -f printcmd)함수로 확장되는 코드입니다.실제로 전화해$1인수를 받아 전달 하고 _에 대한 자리 표시자 역할을 하는 함수 입니다 $0.

쉘의 출력을 이스케이프하려면 zshbash 대신 또는를 사용할 수 있습니다.ksh

관련 정보