다음과 같은 것을 병합하고 싶습니다.
for f in */*; do mv "$f" "${f%/*}/foo.${f##*.}"; done
내 find x -exec y {} \;
스타일의 워크플로를 입력하세요.
루프 for
구조 및 "$f"
변수는 생략될 수 있습니다. 루프는 -exec
표준 반복 동작으로 대체되고 변수(현재 반복의 파일 이름 포함)는 호환되지 않거나 문제가 있는 것 같습니다 {}
.
특히 중괄호와 세미콜론 등이 서로 충돌하기 때문입니다.
답변1
당신은 그것을 사용할 수 있습니다 -exec bash -c 'your code here using $0'
.
귀하의 경우에는 이
find */* -exec bash -c 'mv "$0" "${0%/*}/foo.${0##*.}"' {} \;
당신과 매우 유사합니다 for
.
for f in */*; do mv "$f" "${f%/*}/foo.${f##*.}"; done
-exec sh -c '.....'
팁 1: bash를 사용하지 않는 경우에도 작동합니다.
-exec
팁 2: 동일한 조회에서 여러 항목을 결합할 수 있습니다.
find ./* -type f -exec echo {} \; -exec cat {} \;
팁 3: 간단한 구성의 경우 다음 구문이 유효합니다.
find . -type f ! -name "*.txt" -exec mv -v '{}' '{}'.txt \;
팁 4: 명령을 실행하기 전에 사용자 확인이 필요한 방법을 -exec
사용할 수 있습니다 (테스트에 유용함)-ok
위의 내용은 GNU find
(버전 4.6.0)에서 작동하지만 이 모든 팁이 다른 find
구현에서도 작동할지는 확실하지 않습니다.