번호는 동일하게 유지하면서 공백으로 파일 이름을 바꿉니다.

번호는 동일하게 유지하면서 공백으로 파일 이름을 바꿉니다.

숫자 문자열을 그대로 유지하면서 파일 이름에 공백이 포함된 많은 파일의 이름을 바꾸고 싶습니다. 모든 파일에 대해 숫자가 연속적이지 않으며 숫자 앞과 뒤의 문자열이 동일하지 않습니다. 숫자 앞의 문자열이 모든 파일에 대해 동일하기를 원합니다.

예를 들어:

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

정보:

  1. (\d)\sfoo_\d또는 (\d)\s.*_\d: 파일 이름과 일치
  2. (\d): 이전 번호를 반환합니다.
  3. $1:반환값 변수2
  4. -nprename: 명령 결과를 보는 데 사용되며 , 변경하려면 삭제하세요.

바라보다:man prename

관련 정보