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
.