여러 파일에서 디렉터리 이름의 마지막 문자를 제거하는 방법

여러 파일에서 디렉터리 이름의 마지막 문자를 제거하는 방법

여러 디렉터리 이름에서 문자를 제거하려고 하는데 이에 대한 루프를 설정하는 방법을 잘 모르겠습니다.

Part to remove is '1' (the last digit in the directory name)
e.g. S123451/
     S234561/
     S345671/

또한 하위 폴더에 있는 여러 파일에서 파일 이름의 일부를 제거하려고 하는데 이에 대한 루프를 설정하는 방법을 잘 모르겠습니다.

Part to remove '_*_*_*****' (everything after the 1st underscore up to before the file extension)

e.g  S123451/
        /9/
          S12345_1_9_00001.nii.gz
        /4/
          S12345_1_4_00001.nii.gz
          S12345_1_4_00001.bval
          S12345_1_4_00001.bvec
 S234561/
        /2/
          S23456_1_2_00001.nii.gz
        /1/
          S23456_1_1_00001.nii.gz
          S23456_1_1_00001.bval
          S23456_1_1_00001.bvec
 S345671/
        /5/
          S34567_1_5_00001.nii.gz
        /20/
          S34567_1_20_00001.nii.gz
          S34567_1_20_00001.bval
          S34567_1_20_00001.bvec

답변1

Larry Wall rename(Debian/ubuntu) 또는 prename(Fedora/RHEL/CentOS)의 경우:

목차:

rename -n 's/.$//' *

즉, 마지막 문자를 null로 바꿉니다. -n테스트 실행에 사용되며 제거되거나 -v실제 실행으로 대체됩니다. */디렉토리만 나열되도록 이 모드를 사용하는 경우 :

rename -n 's:./$::' */

문서:

rename -n 's/_[^.]+//' *

즉, 첫 번째 밑줄과 그 뒤의 모든 항목을 점이 아닌 문자로 바꿉니다.

관련 정보