상위 디렉토리 이름을 사용하여 파일 이름을 바꾸는 방법은 무엇입니까?

상위 디렉토리 이름을 사용하여 파일 이름을 바꾸는 방법은 무엇입니까?

recon.text파일 이름을 디렉토리 이름으로 바꾸고 싶습니다 . 나는 1000개의 디렉토리를 가지고 있다. 도와주세요?

7_S4_R1_001_tri10_sha/recon.text
8_S1_R1_001_tri15_sha/recon.text
9_S8_R1_001_tri20_sha/recon.text
10_S5_R1_001_tri25_sha/recon.text
11_S3_R1_001_tri30_sha/recon.text

답변1

그리고:

rename -n 's!(.*sha)/recon\.text!$1/$1.txt!' */recon.text

-n실제로 이름을 바꿀 수 있을 만큼 출력이 좋아지면 스위치를 제거합니다.

남자 이름 바꾸기

경고하다 이 작업을 수행할 수도 있고 수행하지 못할 수도 있는 같은 이름의 다른 도구가 있으므로 주의하세요.

패키지의 일부인 이름 바꾸기 명령은 util-linux그렇지 않습니다.

다음 명령을 실행하면 ( GNU)

$ file "$(readlink -f "$(type -p rename)")"

Perl script, ASCII text executable을 포함 하고 포함하지 않는 결과를 얻으면 ELF이것이 올바른 도구인 것 같습니다 =)

그렇지 않은 경우 이를 기본값으로 설정하고(일반적으로 이미 적용되어 있음) Debian다음과 같이 파생시킵니다 Ubuntu.

$ sudo apt install rename
$ sudo update-alternatives --set rename /usr/bin/file-rename

RedHat 시리즈 배포판의 경우:

yum install prename

'prename' 패키지는 다음 위치에 있습니다.에펠저장소.


아치리눅스의 경우:

pacman -S perl-rename

*BSD의 경우:

pkg install gprename

또는p5-File-Rename


Mac 사용자의 경우:

brew install rename

다른 배포판에 이 명령이 없으면 패키지 관리자를 검색하여 설치하거나수동으로 수행(학과가 없어요...)


이 도구는 원래 Perl의 아버지인 Larry Wall이 작성했습니다.

답변2

표준 도구를 사용하면 상위 디렉터리에서 이 작업을 수행할 수 있습니다.

for file in */recon.text; do mv -- "$file" "${file%/*}/${file%/*}"; done

찾은 모든 파일의 $file이름을 로 변경합니다 ${file%/*}/${file%/*}. 이는 ${file%/*}"삭제된 파일 경로"를 의미합니다 /[anything...].

예를 들어, 7_S4_R1_001_tri10_sha/recon.text파일 의 경우

  • ${file%/*}다음으로 확장7_S4_R1_001_tri10_sha
  • 이후 .${file%/*}/${file%/*}7_S4_R1_001_tri10_sha/7_S4_R1_001_tri10_sha
  • 그런 다음 수행되는 작업은 입니다 mv -- "7_S4_R1_001_tri10_sha/recon.text" "7_S4_R1_001_tri10_sha/7_S4_R1_001_tri10_sha".

do와 사이에 에코를 추가하여 mv실제로 명령을 실행하기 전에 명령이 수행할 작업을 확인할 수 있습니다.

관련 정보