
Eu tenho uma pasta Accounts
contendo contas de e-mail, todas essas pastas possuem uma pasta Archive.folder
. Quero mover todas as pastas de arquivo com um script simples para uma nova pasta.
Eu tentei isso até agora:
find . -mindepth 1 -maxdepth 1 ! -name archive -exec mv -t testnew/ {} +
Mas move todas as pastas, não apenas aquelas chamadas arquivo. Quero encontrar todas as pastas na pasta atual chamada archive e movê-las para a pasta testnew/. O caminho para a pasta movida deve ser o mesmo de antes.
Situação existente:
Accounts
- 1
- archive
- inbox
- folder2
- 2
- archive
- inbox
- folder2
- 3
- archive
- inbox
- folder2
Como deveria ser:
testnew
- 1
- archive
- 2
- archive
- 3
- archive
Responder1
Se não houver problema em fazer isso de forma interativa, vidir
pode ser uma boa maneira. Veresta resposta.
No seu caso o procedimento será assim:
cd /path/to/Accounts find . -type d -name archive | vidir -
vidir
executará um editor de texto. Use "pesquisar e substituir" e substitua cada início./
pelo caminho desejado, para que as linhas correspondam à estrutura de diretórios desejada. Os caminhos podem ser absolutos ou relativos, podem conter../
. Por exemplo, você pode facilmente transformar isso./1/archive ./2/archive ./3/archive
nisso
../testnew/1/archive ../testnew/2/archive ../testnew/3/archive
Salve o arquivo editado e saia do editor.
Notas:
- Se a sua estrutura de diretórios contém diretórios com nomes que terminam com
.
(para que./
a substring não apareça apenas no início), será melhor substituí-la<TAB>./
por<TAB>whatever/path/you/want/
, onde<TAB>
indica o caractere de tabulação. Depende do editor se/como você pode incluir esse caractere em "pesquisar e substituir". - Escolha seu editor especificando
EDITOR
, por exemplofind … | EDITOR=kate vidir -
. vidir
não é capaz de mover arquivos entre sistemas de arquivos. Se todosarchive
os diretórios pertencem a um sistema de arquivos e você desejatestnew
estar em outro sistema de arquivos, crietestnew
no sistema de arquivos de origem, usevidir
e finalmente movatestnew
para o sistema de arquivos de destino.- No fim deesta outra respostaexiste uma abordagem experimental que (ab)usa
EDITOR
para tornarvidir
não interativo. No entantoAchovidir
útil em casos como o seu, principalmente porque me permite ter certeza de que os caminhos resultantes são realmente o que desejo antes que ocorra qualquer renomeação/movimentação. Se eu estragar alguma coisa, posso abortar sem salvar as alterações.Se você deseja uma solução não interativa para o seu problema, essavidir
não é a melhor ferramenta.