Как мне скопировать (стиль архива, где дата не изменена) все файлы в каталоге резервных копий в каталог пользователя при переименовании каждого файла, чтобы удалить случайную часть строки из имени (то есть -2b0fd460_1426b77b1ee_-7b8e)?
ср от:
/backup/path/data/Erp.2014.02.16_16.57.03-2b0fd460_1426b77b1ee_-7b8e.etf
чтобы:
/home/user/data/Erp.2014.02.16_16.57.03.etf
Каждый файл всегда начинается с "Erp." затем следует строка с отметкой даты и времени, за которой следует случайная строка, а затем расширение «.etf». Я хочу сохранить все элементы имени, включая отметку даты и времени. Я просто хочу удалить случайную строку.
Случайная строка позволяет создавать несколько резервных копий одного и того же файла. Тем не менее, в этом случае я просто запустил fdupes и дубликатов нет. Так что я могу просто восстановить все файлы, удалив случайную строку.
Я ищу однострочную команду bash, чтобы сделать это.
Если это не сработает, я мог бы сделать это в два или более шагов. Я обычно использую KRename, но в этом случае мне нужно сделать это в Bash. (Я работаю удаленно.)
pax
. Это выглядит как очень полезный инструмент. Меня удивляет, почему в других дистрибутивах это не стандартно ...pax
существует в Linux Standard Base с 2005 года. Кроме того, альтернативой для этого является, GNUcpio
, возможно, наименее полезный инструмент GNU из существующих.rename
в Fedora / Red Hat все по-другому: я не знаю, как использовать это в этом случае.Вы можете использовать
cp
команду с-a
опциейА затем используйте цикл for, чтобы переименовать все файлы при копировании:
Готов. Запустите эту команду в исходном каталоге.
Объяснение: Символ
%%-*
будет обрезать все символы после первого появления дефиса / минуса,-
а.etf
в конце снова будет добавлено расширение файла.Ну и как один вкладыш, все это в одну строчку. :-) Как это
источник
%%-*
совет? Мне любопытно.В зш, пользуйся
zmv
. Поместите это в свой.zshrc
:Тогда используйте
В Баш:
Если у вас нет zsh, способ POSIX использует pax (это рекурсивно копирует каталоги).
Если вы используете систему с ограниченным доступом без zsh и pax, вы можете использовать цикл:
источник
cp
не имеет такой возможности. Я помню,cpio
что смог сделать это, но текущая страница руководства говорит иначе. Тем не менее, (GNU)tar
имеет--transform
возможность:Таким образом, вы должны иметь следующую строку:
источник