удалить «~» из имени файла

удалить «~» из имени файла

У меня ограниченная оболочка bash на моем NAS и много файлов, которые содержат char ~в имени файла. Например, у меня есть файл в , 2018/10/example~1.jpgи мне нужно переместить и переименовать его в allFiles/2018-10-example_1.jpg.

Мне нужно заменить ~на _и добавить путь вместо -в /имени файла.

Не могли бы вы мне помочь?

P.S. Только файлы с расширением .jpg/ .png/.mov

решение1

У меня нет QNAP, но я думаю, что его оболочка на самом деле BusyBox. Это должно работать как с BusyBox, так и с bash (хотя с bash вам также нужно установить find+cut+awk):

Предположим, что каталоги года (например, «2018») и каталоги «allFiles» находятся на одном уровне, и этот уровень является вашим текущим рабочим каталогом в вашей оболочке:

find . -name '*.jpg' | cut -c3- | awk '{ newname=$0; gsub(/~/, "_", newname); gsub(/\//, "-", newname); gsub(/^/, "allFiles/", newname); print "mv " $0 " " newname; }'

Это создаст набор команд для перемещения всех ваших .jpg файлов. Сначала проверьте команды, чтобы убедиться, что они разумны. Затем запустите их, добавив "| sh" в конец указанной выше команды.

Затем замените «*.jpg» в приведенном выше примере на другое расширение файла, которое вы хотите обработать, и повторите.

Связанный контент