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
실제로 명령을 실행하기 전에 명령이 수행할 작업을 확인할 수 있습니다.