我是终端世界的新手,想处理目录中的一些图像。一些图像示例如下(它们来自雾气城市景观数据集):
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
扩展名。
有人可以帮忙处理 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