저는 터미널 세계를 처음 접했고 디렉토리의 일부 이미지를 처리하고 싶습니다. 일부 이미지 예는 다음과 같습니다(Fog Cityscapes 데이터세트에서 가져옴).
frankfurt_000000_000294_leftImg8bit_foggy_beta_0.01.png
frankfurt_000000_000294_leftImg8bit_foggy_beta_0.02.png
frankfurt_000000_000294_leftImg8bit_foggy_beta_0.005.png
munster_000000_000019_leftImg8bit_foggy_beta_0.01.png
munster_000000_000019_leftImg8bit_foggy_beta_0.02.png
munster_000000_000019_leftImg8bit_foggy_beta_0.005.png
부분 이름 은 _leftImg8bit_foggy_beta_
모든 이미지에 공통되며 앞의 부분은 다른 이미지를 식별하는 데 사용됩니다. 먼저 이 이미지를 접미사 beta
0.01, 0.02 또는 0.005를 사용하여 세 개의 개별 하위 디렉터리로 분할하고 싶습니다 . 파일을 분리한 후 확장자를 _leftImg8bit
유지하면서 하위 디렉터리의 파일 이름 뒤의 모든 파일 이름을 제거하고 싶습니다 ..png
나는 리눅스(특히 CentOs) 터미널 명령에 익숙하지 않기 때문에 누구라도 도움을 줄 수 있습니까? 미리 감사드립니다.
답변1
그리고 zsh
:
autoload -Uz zmv # best in ~/.zshrc
mkmv() { mkdir -p -- $2:h && mv -- "$@"; }
zmv -n -P mkmv '(*)_leftImg8bit_foggy_beta_(*)(.png)' '$2/$1$3'
( -n
만족할 경우 제거(모의 실행)).
또는 POSIX와 유사한 쉘을 사용하십시오(비록 보호 기능은 없지만 zmv
).
for file in *_leftImg8bit_foggy_beta_*.png; do
dir=${file#*_leftImg8bit_foggy_beta_}
dir=${dir%.*}
mkdir -p -- "$dir" &&
mv -- "$file" "${file%%_leftImg8bit_foggy_beta_*}.png"
done