Como eu copiava (estilo de arquivo onde a data não é alterada) todos os arquivos em um diretório de backup para o diretório do usuário enquanto renomeia cada arquivo para remover a parte aleatória da cadeia de caracteres do nome (por exemplo, -2b0fd460_1426b77b1ee_-7b8e)?
cp de:
/backup/path/data/Erp.2014.02.16_16.57.03-2b0fd460_1426b77b1ee_-7b8e.etf
para:
/home/user/data/Erp.2014.02.16_16.57.03.etf
Cada arquivo sempre começará com "Erp". seguido pela sequência de carimbo de data e hora, seguida pela sequência aleatória e depois pela extensão ".etf". Quero manter todos os elementos de nome, incluindo o carimbo de data e hora. Eu só quero remover a sequência aleatória.
A sequência aleatória permite vários backups do mesmo arquivo. No entanto, neste caso, eu apenas executei fdupes e não há duplicatas. Para que eu possa simplesmente restaurar todos os arquivos, removendo a sequência aleatória.
Estou procurando um comando bash de uma linha para fazer isso.
Se isso não funcionar, eu poderia fazê-lo em duas ou mais etapas. Eu normalmente uso o KRename, mas neste caso eu preciso fazê-lo no bash. (Estou trabalhando remotamente.)
pax
. Parece uma ferramenta muito útil. Faz-me pergunto porque não é padrão em mais distros ...pax
está na Base Padrão do Linux desde 2005. Além disso, a alternativa seria GNUcpio
, possivelmente a ferramenta GNU menos característica da atualidade.rename
é diferente no Fedora / Red Hat: não sei como usá-lo neste caso.Você pode usar o
cp
comando com a-a
opçãoE, em seguida, use um loop for para renomear todos os arquivos enquanto os copia:
Pronto. Inicie este comando no diretório de origem.
Explicação: Ele
%%-*
cortará todos os caracteres após a primeira ocorrência de um hífen / menos-
e.etf
no final adicionará novamente a extensão do arquivo.Bem, e como um forro, coloque tudo em uma linha. :-) Como isso
fonte
%%-*
dica? Estou curioso.No zsh, use
zmv
. Coloque isso no seu.zshrc
:Então use
Na festança:
Se você não possui o zsh, uma maneira POSIX usa pax (isso copia os diretórios recursivamente).
Se você estiver em um sistema restrito sem zsh e sem pax, poderá usar um loop:
fonte
cp
não tem essa capacidade. Lembro-me decpio
poder fazer isso, mas a página atual diz o contrário. No entanto, (gnu)tar
tem uma--transform
opção:Então você teria um cmdline como:
fonte