
나는 여러 파일에서 프로토콜을 제거하기 위해 다음 명령(Solaris에서)을 사용하고 있습니다.
find . -name "*.txt" -exec perl -pi -e 's/http//g' '{}' \;
편집된 파일에 대한 보고서를 얻을 수 있도록 자세한 출력을 제공하는 방법이 있습니까?
고마워요, 앤디
답변1
다음을 사용하여 파일당 대체 횟수를 얻을 수 있습니다.
find . -type f -exec perl -pi -e '
$count{$ARGV} += s/http//g;
END {for (keys %count) {print "$_: $count{$_}\n" if $count{$_}}}' {} +
해당 솔루션과 원래 솔루션에서는 perl
대체 여부에 관계없이 파일을 다시 작성합니다.
;
명령 을 종료하는 데 사용하지 마십시오 -exec
. perl
한 번에 여러 파일을 처리할 수 있으므로 파일당 하나의 Perl을 호출할 필요가 없습니다.
실제로 대체를 수행하지 않고 해당 출력만 원하는 경우 위 명령에서 -pi
로 바꾸십시오.-n
다음을 수행할 수도 있습니다.
find . -type f -exec grep -c http /dev/null {} +
개수를 얻으려면윤곽포함합니다 http
(발생 횟수와 반드시 동일할 필요는 없음 http
).
답변2
-print
및 다음을 모두 사용하여 Perl로 전송된 파일에 대한 보고서를 얻을 수 있습니다 -exec
.
find . -name "*.txt" -print -exec perl -pi -e 's/http//g' '{}' \;
어떤 파일이 수정되었는지 확인하려면 다음과 같이 하세요.
find . -name "*.txt" \
-exec perl -i.bak -pe 's/http//g' '{}' \; \
-exec sh -c 'cmp -s "$1" "$1.bak" && echo "$1" || rm "$1.bak"' _ '{}' \;