여러 디렉터리 이름에서 문자를 제거하려고 하는데 이에 대한 루프를 설정하는 방법을 잘 모르겠습니다.
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/_[^.]+//' *
즉, 첫 번째 밑줄과 그 뒤의 모든 항목을 점이 아닌 문자로 바꿉니다.