Вы можете сделать это с помощью простого цикла shell:
for x in ./*_*_*_*; do mv -i "$x" "${x%_*}"; done
т.е. для каждого файла, имя которого содержит по крайней мере три подчеркивания, переименуйте файл, удалив часть, начинающуюся с последнего подчеркивания.
Если есть коллизия (например, существуют оба 20150512_101129_3016_v1A
и 20150512_101129_3016_v1B
), то первый файл в лексикографическом порядке переименовывается в нужный, а второй перемещается в подкаталог, т.е.. Например, 20150512_101129_3016_v1B
перемещается в 20150512_101129_3016/20150512_101129_3016_v1B
после того, как 20150512_101129_3016_v1A
был переименован в 20150512_101129_3016
. Чтобы избежать этого, добавьте дополнительную проверку:
for x in ./*_*_*_*; do
if [ -e "${x%_*}" ]; then
echo "Not renaming $x because ${x%_*} already exists"
continue
fi
mv "$x" "${x%_*}"
done
Или, в Linux, передайте опцию -T
в mv
, чтобы заставить его выполнить эту проверку.