파일 이름에서 개행 문자 제거

파일 이름에서 개행 문자 제거

wget이 로그를 추가할 파일 이름을 생성하는 PHP 코드가 있습니다. 2000개가 넘는 파일을 생성했는데 문제는 이름 PHP_EOL에 이 코드를 실수로 추가했기 때문에 사용할 수 없다는 것입니다.LF/line feed/%0A

이러한 파일 이름의 예 (브라우저를 통해 액세스할 때, /var/www/html에 있을 때 http://xxxx/wget_01_a%0a.txt)%0a

line feed엉망이 됐어요. 모든 파일을 검색하고 발견하면 개행 없이 이름을 바꾸는 이름 바꾸기 배치가 있기를 바랐습니다 .http://xxxx/wget_01_a.txt

ls퍼티를 사용하면 모든 특수 문자(원치 않는 문자에 국한되지 않음)가 가 되고 ?, 내가 대상으로 삼고 싶은 것은 개행 문자뿐인 것 같기 때문에 이를 어떻게 처리해야 할지 잘 모르겠습니다 .

답변1

renamebash를 가정하고 CentOS 6과 함께 제공되는 util-linux 유틸리티를 사용하십시오 .

rename $'\n' '' wget_*

이를 위해서는 나열된 파일 이름에서 개행 문자를 제거해야 합니다. 원하는 대로 작동하는지 확인하기 위해 작은 하위 집합에서 시도해 보는 것이 좋습니다( CentOS 7에서는 변경 사항을 표시하는 rename스위치가 지원된다는 점에 유의하세요).-v

Perl 기반 배포판을 사용하는 경우 rename:

rename -n 's/\n//g' wget_*

그런 다음 실제로 이름 바꾸기를 수행하지 않고 실행하십시오 -n.

답변2

답변된 내용을 바탕으로 find 명령과 이름 바꾸기를 결합하여 현재 폴더와 개행 문자가 포함된 하위 폴더의 모든 파일 이름을 바꾸도록 일반화하겠습니다.

find -name $'*\n*' -exec rename  $'s|\n| |g' '{}' \;

여기서 find 명령은 개행 문자가 포함된 모든 파일을 찾는 반면, rename 명령은 이름의 각 개행 문자를 공백으로 바꿉니다.

캐리지 리턴(\r)과 같이 문제가 있는 다른 문자에 대해서도 동일한 작업을 수행할 수 있습니다.

관련 정보