파일 이름에서 줄 바꿈 제거


9

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원치 않는 문자로 제한되지 않는 모든 특수 문자가 퍼티에 있을 때처럼 보이는 것처럼 보이기 때문에 이것을 처리하는 방법을 잘 모르겠습니다 ?.

답변:


12

renameCentOS 6이 제공하는 util-linux 의 유틸리티 사용 및 bash 가정 :

rename $'\n' '' wget_*

나열된 파일 이름에서 개행 문자를 삭제하도록 요청합니다. 작은 하위 집합에서 시도하여 원하는 작업을 수행하는 것이 좋습니다 ( renameCentOS 7 -v에서는 변경 내용을 보여주는 스위치를 지원합니다 ).

대신 Perl 기반을 제공하는 배포판을 사용하는 경우 rename:

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

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


형제, 아무 일도 없었습니다 pastebin.com/NjMg8vTL 나는 centos 6를 사용하고 있습니다
arvil

아마도 당신이 가진 줄 바꿈 문자는 실제로 그렇지 \n않습니까? 에코와 같은 것을 수행 *.txt | od -c하여 인쇄 할 수없는 실제 문자가 무엇인지 확인할 수 있습니까?
dhag


어떤 이유로 든 이전 붙여 넣기의 파일이 일치하지 않는 한 (잘못 선택 *.txt하는 이유를 설명 하지 않는 한) 무엇이 잘못되었는지 잘 모르겠습니다 rename. 예 txt를 들어 $'\n'and 대신 두 패턴을 설정하면 ''출력이 발생합니까? echo $ '\ n'실제로 두 줄 바꿈을 인쇄합니까?
dhag

1
나는 rename $'\r' '' wget_*그것을 작동시키기 위해 사용해야 했다
rshdev

2

이미 답변 한 내용을 바탕으로 find 명령을 rename과 결합하여 현재 폴더와 하위 폴더에 줄 바꿈이 포함 된 모든 파일의 이름을 바꾸도록 일반화했습니다.

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

여기서 find 명령은 줄 바꿈을 포함하는 모든 파일을 찾고 이름 바꾸기 명령은 이름의 모든 줄 바꿈을 공백으로 바꿉니다.

캐리지 리턴 (\ r)과 같은 문제가있는 다른 문자에 대해서도 동일하게 수행 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.