숫자 문자열을 그대로 유지하면서 파일 이름에 공백이 포함된 많은 파일의 이름을 바꾸고 싶습니다. 모든 파일에 대해 숫자가 연속적이지 않으며 숫자 앞과 뒤의 문자열이 동일하지 않습니다. 숫자 앞의 문자열이 모든 파일에 대해 동일하기를 원합니다.
예를 들어:
100 foo_1.ext
200 foo_2.ext
201 foo_3.ext
다음으로 이름 바꾸기
100.ext
200.ext
201.ext
답변1
당신은 시도 할 수 있습니다:
for a in *.ext; do mv "$a" "${a/ */}.ext"; done
설명하다:
for a in *.ext
.ext
- 현재 디렉토리에 있는 확장자를 가진 모든 파일을 가져옵니다.
a/ */
- 하위 문자열을 아무것도 없는 것으로 바꿉니다( ${string/substring/replacement} ). 이 구문은 공백(포함) 뒤의 모든 기호를 가져와서 제거합니다.
.
아니면 당신이 가지고 있다면확장자가 다른 파일디렉터리의 모든 파일을 처리해야 하는 경우 다음을 시도해 보세요.
for a in *; do mv "$a" "${a/ *\./\.}"; done
Perl 이름 바꾸기 명령과 동등한 것은 다음과 같습니다:
prename 's/ .*\./\./' *
예: 문서
100 foo_1.ext
200 foo_1.ext
201 foo_3.ext
3401 txt_3.txt
다음으로 이름이 변경됩니다.
100.ext
200.ext
201.ext
3401.txt
이름에 공백이 없는 파일은 처리되지 않습니다.
답변2
이를 위해 사용됩니다 prename
:
prename 's/\D*(\d*).*/$1.ext/' *.ext
이는 주어진 모든 파일에 대해 \D*\d*.*
확장 정규 표현식(숫자가 아닌 여러 개 뒤에 여러 숫자 및 나머지 이름이 오는 것)을 포함된 부분 ()
(예: 숫자 및 확장자) 으로 대체합니다.
질문을 편집한 후 파일 이름은 숫자로 시작하고 그 뒤에 공백이 오는 것으로 나타납니다. 이렇게 하면 상황이 더욱 단순해집니다.
prename 's/ .*/.ext/' *.ext
답변3
Perl 이름 바꾸기(Linux 이름 바꾸기 아님)를 사용할 수 있습니다.
prename -n 's/(\d*)\s*foo_\d*/$1/g' /path/to/folder/*.ext
또는
prename -n 's/(\d*)\s*.*_\d*/$1/g' /path/to/folder/*.ext
예시 파일 이름:
100 foo_2.ext
101 foo_1.ext
200 foo_234.ext
302 foo_2.ext
결과:
100.ext
101.ext
200.ext
302.ext
정보:
(\d)\sfoo_\d
또는(\d)\s.*_\d
: 파일 이름과 일치(\d)
: 이전 번호를 반환합니다.$1
:반환값 변수2
-n
prename
: 명령 결과를 보는 데 사용되며 , 변경하려면 삭제하세요.
바라보다:man prename