사이에 삽입된 여러 디렉터리의 이름을 바꿉니다.

사이에 삽입된 여러 디렉터리의 이름을 바꿉니다.

다음과 같이 이름을 바꿔야 하는 디렉터리가 수백 개 있습니다.

from 15_öblös to 15_adj_öblös
from 14_kies to 14_adj_kies
and so on...

그래서 숫자와 단어 사이에 "adj"를 삽입해야 합니다.

내가 한 일은 좋지 않았어

for dic in [0-9]*
do
m=`echo "$dic" | cut -d"_" -f1`
l=`echo "$dic" | cut -d"_" -f2`
mv "$dic" "${m}_adj_${l}"
done 

답변1

renameFedora, Debian 및 그 파생 제품(Ubuntu, Mint 등)에는 기본적으로 이 작업 을 수행하는 Perl 버전의 명령이 설치되어 prename있으며 다음과 같이 작동합니다.

prename 's/_/_adj_/' *
# OR
rename 's/_/_adj_/' *

다음과 같이 더 복잡한 작업을 수행하여 더 세밀하게 제어하여 파일을 찾고 이름을 바꿀 수 있습니다.

prename 's/(\d+)_/$1_adj_/' *
# OR 
rename 's/(\d+)_/$1_adj_/' *

참고: 의 경우 prename첫 번째 매개변수는 Perl 코드입니다.

답변2

나는 귀하의 스크립트에서 문제를 볼 수 없지만 귀하가 가지고 있는 모든 디렉토리를 알지 못하기 때문에 귀하가 직면한 문제가 무엇인지 알 수 없습니다. 하지만 다음과 같은 것이 도움이 될 수 있습니다.

find ./ -maxdepth 1 -type d | while read dirname
do
  newdirname=$(echo ${dirname} | sed -e "1,1s/_/_adj_/")
  mv ${dirname} ${newdirname}
done

답변3

비임베디드 Linux 시스템에서는 이 rename명령을 사용할 수 있습니다. 이 명령은 매우 간단하지만 이 경우에는 충분합니다. 이름이 숫자로 시작하는 현재 디렉터리의 모든 파일 중 첫 번째 파일을 다음 _과 같이 바꾸려면:_adj

rename _ _adj_ [0-9]*

Debian 및 그 파생 제품(Ubuntu, Mint 등)에서는 이 명령을 이라고 합니다 rename.ul. 이러한 배포판에 대한 명령은 첫 번째 인수 rename라고도 하는 더 강력한 다른 명령입니다 .prename진주암호. _다음으로 교체 _adj_:

prename 's/_/_adj_/' [0-9]*

관련 정보