디렉토리의 모든 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"'