Preciso pesquisar (no disco inteiro) e substituir (onde houver correspondências) um arquivo por outro (ambos no mesmo caminho).
Exemplo:
Folder 1
x*.txt (good) (e.g.: xFile.txt)
*.txt (bad) (e.g.: File.txt)
Se houver uma correspondência de ambos os arquivos no mesmo caminho, preciso excluir: *.txt (e.g.: File.txt)
e renomear: x*.txt (e.g.: xFile.txt)
para*.txt (e.g.: File.txt)
Resultado:
Folder 1
*.txt (e.g: File.txt... old xFile.txt)
Eu uso este comando:
find -name 'x*.txt' | sed -r 'p;s/g([^\/]*.txt)/\1/' | xargs -d '\n' -n2 mv
O problema é que o comando não verifica se ambos os arquivos existem (xFile.txt e File.txt no mesmo caminho) antes de executar o pedido
Como posso resolvê-lo? desde já, obrigado
Com as ferramentas GNU, você pode fazer algo como:
Isso pressupõe que não há arquivos cujo nome comece com mais de um
x
. Por exemplo, não vai fazermv ./xx.txt ./x.txt
Primeiro, definimos uma função para fazer o trabalho para nós:
Agora, usamos
find
e um pouco de magia negra para iterar sobre nossos enjeitados:Usamos
find
para localizar todos os arquivos com uma.txt
extensão (isso pode ser refinado para atender a qualquer critério que você desejar) e, por sua vez, executá-los pelo processo switcheroo -- usamos[[ ... ]]
para testar a existência do arquivo de substituição e, se estiver presente, utilizarmv
para efetuar a substituição.