Usando o Bash
Então, digamos que eu tenha um monte de arquivos colocados aleatoriamente em um diretório pai ~/src
, quero pegar todos os arquivos correspondentes a um determinado sufixo e movê-los (ou copiá-los) para um ~/dist
diretório.
Vamos supor para esse fim que todos os nomes de arquivos tenham esta convenção de nomenclatura:
<filename_prefix>.<filename_suffix>
Eu descobri que essa era uma maneira rápida de obter todos os arquivos com um determinado arquivo filename_suffix
e colocá-los em uma pasta dist:
mkdir ~/dst
find source -name "*.xxx" -exec mv -i {} -t ~/dst \;
Agora, um passo adiante ... como posso usar a saída de find, nesse caso filename
, e usar o filename_prefix
para gerar um diretório com o mesmo nome ~/dist
e depois mover (ou copiar) todos os arquivos com esse prefixo para o diretório apropriado?
mkdir ~/dst
find source -name "*.xrt,*.ini,*.moo" -exec mv -i {} -t ~/dst \;
Essencialmente, como altero o comando acima (ou talvez use outro comando), para criar uma estrutura como esta
(RESULTADO)
~/dist/people/people.xrt
~/dist/games/games.xrt
~/dist/games/games.moo
~/dist/games/games.ini
~/dist/monkeys/monkeys.ini
~/dist/monkeys/monkeys.xrt
de uma árvore de diretórios como esta?
(ENTRADA)
~/src/xrt/people.xrt
~/src/xrt/games.xrt
~/src/conf/games.ini
~/src/pack/monkeys.xrt
~/src/e344/games.moo
~/src/e344/monkeys.moo
~/src/en-us/monkeys.ini
fonte
shopt -s globstar
, veja minha edição. Se houver apenas dois níveis, você poderá usar*/*.*
e o snippet funcionará em qualquer shell.trapaça encontrar linha de comando:
na verdade, uma solução alternativa para chamar o script bash no find LOL.
= P
fonte
happy rm -rf /
! Esse tipo de código merece um -1.Yay" rm -rf / "Rox0r.avi
, novamente não é como um problema ...-exec bash -c 'command which uses "$1"' bash '{}' ';'
. Bem, é inútil de qualquer maneira.