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
.
쉘의 출력을 이스케이프하려면 zsh
bash 대신 또는를 사용할 수 있습니다.ksh