디렉터리 이름을 기준으로 디렉터리의 파일 이름 바꾸기

디렉터리 이름을 기준으로 디렉터리의 파일 이름 바꾸기

Linux, SSH의 디렉터리 이름을 기반으로 여러 파일의 이름을 바꾸려고 합니다.

라는 디렉토리가 있습니다 XYZ01smith. 이라는 이름의 파일이 4개 있습니다 smith_5*. 이 파일에 접두사를 추가 해야 합니다 XYZ01.
하지만, 다음 디렉토리는 입니다 XYZ02perry. 이름이 4개입니다 . 이 파일에 접두어를 추가 perry_3*해야 합니다 .XYZ02

각 디렉토리에 대해 이 작업을 수행하는 루프가 있습니다.

for i in smith_5*;
    do mv ${i} XYZ01${i};
done 

XYZ01name하지만 50개의 디렉터리( ~ ) 가 있으므로 XYZ50name하나의 스크립트를 사용하여 50개의 디렉터리를 모두 처리할 수 있는 것이 좋습니다. 이것이 가능해야 한다고 확신하지만 구현 방법을 모르겠습니다.

답변1

그리고 zsh:

autoload zmv # best in ~/.zshrc
zmv '(XYZ??)(*)/(*)' '$1$2/$1$3'

답변2

그리고 bash:

for f in XYZ*/*; do mv -v "$f" "${f%/*}/${f:0:5}${f##*/}"; done

for모든 디렉토리를 반복 합니다 XYZ*. 그러면 명령 mv이 파일 이름을 바꿉니다.

어디:

  • $f원본 파일 이름입니다
  • ${f%/*}디렉토리 이름입니다
  • ${f:0:5}접두사입니다
  • ${f##*/}원본 파일 이름입니다

답변3

이 명령을 실행하면 수행할 작업이 표시됩니다.

ls -d XYZ*/* |
sed -n s'|\(XYZ[0-9][0-9]\)\([^/]*\)/\(\2_.*\)|mv & \1\2/\1\3|p' |
cat

명령을 실행하려면 cat로 바꾸십시오 sh.

관련 정보