!["find -exec"에 매개변수를 사용하는 방법은 무엇입니까? [복사]](https://linux55.com/image/32727/%22find%20-exec%22%EC%97%90%20%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
디렉토리의 모든 PHP 스크립트에 대해 정적 HTML 파일을 생성하려고 합니다.
find . -name "*.php" -exec php {} > {}.html \;
하지만 모든 결과를 {}.html
. 파일 이름에서 ".php"를 제거하는 방법은 무엇입니까?
답변1
이는 보다 효율적이고 이식 가능한 방법이어야 합니다.
find . -name "*.php" -exec sh -c \
'for i; do php "$i" > "$(dirname "$i")/$(basename "$i" .php).html"; done' sh {} +
또는 Stephane Chazelas의 의견 덕분에 더욱 간단하고 이식성이 향상되었습니다.
find . -name "*.php" -exec sh -c \
'for i do php "$i" > "${i%.*}.html"; done' sh {} +
후자는 또한 Stephane이 지적한 이상한 디렉토리 이름 문제를 해결합니다.
답변2
rename
매우 읽기 쉬운 솔루션입니다.
shopt -s extglob
rename --no-act --verbose 's/php$/html/' /path/to/parent/dir/**/*.php
--no-act
괜찮아 보이면 삭제하세요.
답변3
알고 있었다
find . -name "*.php" | sed "s/\.php//" | xargs -i sh -c 'php "{}.php" > "{}.html"'