-exec 드라 이런을 찾으시겠습니까?
find . -exec somecommand {} \;실제로 명령을 실행하지 않고 대체로 결과가 무엇인지 확인하는 방법이 있습니까? 시험 실행 (또는 테스트 실행 또는 인쇄)처럼?
예를 들어 다음과 같은 파일 구조가 있다고 가정합니다.
/a/1.txt
/a/2.txt
/a/b/3.txt
출력이 stdout에 인쇄되지만 다음과 같이 실행되지 않도록 디렉토리 find . type f -exec rm {} \;내에서 테스트하는 방법이 있습니까?a
rm 1.txt
rm 2.txt
rm b/3.txt
업데이트 참고 : rm단지 예제 명령이며 일반적인 경우에 관심이 있습니다.
답변
echo rm대신 실행할 수 있습니다.rm
find . type f -exec echo rm {} \;
또한, find이 -delete찾은 파일을 삭제하는 옵션을
를 들어 rm구체적으로, 당신은 필요가 없습니다 -exec: 단순히 실행 find . -type f목록 및 추가 -delete(분명히 일치하는 파일이 그 사이에 삭제 / 생성되는 금지) 이전 명령에 의해 나열된 파일을 삭제합니다.
또한 rm임의의 수의 인수를 \;사용 +하는 명령의 경우 가능한 한 적은 명령을 실행 하기 위해 대체 할 수 있습니다.
약간의 입맛이 있지만를 사용 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.
해당 셸에 대한 출력을 이스케이프하려면 bash 대신 zsh또는 대체 할 수 있습니다 ksh.