Excel에서 파일을 만들고 해당 파일을 Linux 컴퓨터로 ftp로 보냈습니다. 파일에는 많은 명령이 있습니다 mkdir
. 새로 생성된 모든 디렉토리에는 이제 끝에 캐리지 리턴 문자가 있습니다. 다음을 사용하여 디렉토리를 찾을 수 있습니다.
find . -type d -name *$'\r'
하지만 다음 명령을 사용하여 삭제하려고 하면 다음과 같습니다.
find . -type d -name *$'\r' | xargs rm-rf
작동하지 않습니다. 아무것도 삭제되지 않습니다. 디렉토리는 여전히 존재하며 여전히 캐리지 리턴이 있습니다.
불쾌한 "\r"을 제거하는 명령을 만드는 것을 도와주실 수 있나요? 감사해요.
추신: 저는 RHEL 5.3을 사용하고 있습니다.
답변1
리눅스rename
이 명령을 사용하면 이 작업이 쉬워집니다.
rename $'\r' '' *
$'\r'
현재 디렉터리의 모든 파일 이름에서 첫 번째이자 유일한 캐리지 리턴 문자( )를 빈 문자열( )로 바꿉니다 . 캐리지 리턴이 포함되지 않은 이름은 변경되지 않습니다. 또는 이름을 바꿔야 하는 것으로 간주되는 파일만 ''
쓸 수 있습니다 .rename $'\r' '' *$'\r'
하위 디렉터리의 파일에도 작업이 필요한 경우:
shopt -s globstar
rename $'\r' '' **/*$'\r'
(Debian, Ubuntu 및 그 파생 제품 사용자: rename
로 변경 rename.ul
하거나 rename $'\r' ''
로 변경합니다 rename 's/\r//'
.)
대안으로 zsh를 사용하세요zmv
기능:
zmv $'**/*\r' "${f%?}"
답변2
편집: sed
줄에서 \r을 두 번 이스케이프하는 것을 잊었습니다.
그 중 하나가 당신에게 적합합니다
for i in $(find . -type d -name '*\r'); do mv "$i" "$(echo $i | sed -e 's/\\r//g')"; done
find . -type d -name '*\r' -exec mv "{}" "$(echo {} | sed -e 's/\\r//g')" \;
현재 디렉토리 아래에서 *$\r이라는 이름의 모든 디렉토리를 찾습니다.
그런 다음 mv
\r을 뺀 동일한 이름으로 이름을 바꿉니다.
답변3
이 시도find . -type d -name *$'\r' -exec rm -rf '{}' \;