处理目录中的文件及其名称

处理目录中的文件及其名称

我是终端世界的新手,想处理目录中的一些图像。一些图像示例如下(它们来自雾气城市景观数据集):

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_部分名称对于所有图像都是通用的,并且前面的部分用于标识不同的图像。我想首先将这些图像分成三个独立的子目录,后缀为beta0.01或0.02或0.005。分离文件后,我想删除_leftImg8bit子目录中所有文件名之后的文件名,同时保留.png扩展名。

有人可以帮忙处理 linux (具体来说是 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 的 shell(尽管没有 的保护措施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

相关内容