Tenho a infelicidade de ter um histórico do MS-DOS - mas pelo menos isso me faz apreciar o quanto o Linux é mais poderoso. Eu tenho trabalhado para melhorar meu Linux-Fu, mas há algumas coisas que poderiam ser feitas com o DOS que não sei ao certo como realizar com mais facilidade com o Linux:
Renomeando vários arquivos - usando dois curingas
c:\> dir
Directory of c:\
file1.txt
file2.txt
file3.txt
file4.txt
c:\>rename *.txt *.bak
c:\> dir
Directory of c:\
file1.bak
file2.bak
file3.bak
file4.bak
Eu sei que poderia usar find -exec
aqui, mas é possível usar uma sintaxe mais curta - talvez mv
com alguns sinalizadores ou sintaxe especiais? Eu acho que a chave para isso é o segundo *
curinga, pois o linux não deve ter um problema com o primeiro (ou seja, eu sei como selecionar os arquivos que quero renomear usando curingas)
Renomeando um único arquivo - usando um curinga
c:\> dir
Directory of c:\
file1.txt
c:\>rename file1.txt *.bak
c:\> dir
Directory of c:\
file1.bak
Isso seria especialmente útil ao renomear nomes de arquivos longos e pesados. Eu pensei que talvez eu pudesse usar mv file1.txt $1.bak
para terminar com o file1.txt.bak
que também seria aceitável, mas não tenho certeza se você pode referenciar um $1
parâmetro inline com um comando shell. Novamente, neste caso específico, é conveniente saber como o ms-dos bastardiza o *
curinga para ser usado como uma espécie de captura / substituição correspondente para parte do nome do arquivo.
Filtrando Listagens de Diretórios com um Curinga
c:\> dir
Directory of c:\
file1.txt
file2.txt
file3.txt
file4.txt
text.txt
\temp (directory)
c:\> dir file*
Directory of c:\
file1.txt
file2.txt
file3.txt
file4.txt
c:\> t*
Directory of c:\
text.txt
\temp (directory)
Não sei ao certo qual é a sintaxe certa para fazer isso ls
ou se é mesmo possível. Se eu fiz algo como ls t*
isso irá recursar em diretórios começando com t
. Minha solução alternativa está usando find . --max-depth 1 -iname "t*"
ou algo parecido ls -al | grep t
- nenhum dos quais é tão curto e simples quanto dir t*
é.
Finalmente, sei que posso configurar aliases para tornar esses comandos longos mais curtos, mas eu gostaria de aprender um pouco sobre o linux-fu pronto para fazer essas coisas, porque às vezes você está conectado a um sistema remoto ou trabalhando em uma nova máquina.
Então, como pode I mv
e ls
arquivos da mesma forma que eu costumava dir
e rename
arquivos?
fonte
somefunc *.Ext
se esse padrão não corresponder a nenhum arquivo e brinque com citação para ver se você consegue passar um padrão ( sem expandi-lo) entre funções. Dica de segurança: não use emrm
qualquer lugar enquanto estiver experimentando a expansão de globbing / shell :-) #Uma coisa a ter em mente quando se trata de curingas é que eles são expandidos pelo shell. O aplicativo não sabe se você usou caracteres curinga ou digitou os nomes. Por exemplo, se você digitar
rename *.txt *.bak
, orename
comando verá algo parecidorename file1.txt file2.txt existingfile.bak
. Isso não é informação suficiente para continuar.Lidarei com a questão sobre
ls
primeiro, porque é mais simples. Se tudo o que você deseja são os nomes correspondentes, não precisals
, porque o shell já está fazendo a expansão.Se você quiser obter mais informações sobre os arquivos, passe a
-d
opção parals
, para dizer para não listar o conteúdo dos diretórios.Não existe um utilitário padrão para renomear arquivos, porque os primeiros sistemas unix não vieram com um. O método portátil para renomear arquivos usa um loop e é um pouco detalhado:
Existem vários utilitários comuns para renomear arquivos, nenhum dos quais com garantia de instalação em um determinado sistema unix, mas todos fáceis de instalar. Aqui estão os principais:
rename
doutil-linux
conjunto, disponível em todos os sistemas Linux não incorporados (e em nenhum outro lugar). No Debian e derivados (incluindo o Ubuntu), este comando é chamadorename.ul
. Desde que não haja outra ocorrência.txt
além da extensão final, você pode escreverrename
é um script Perl que o Debian e derivados fornecem como/usr/bin/rename
. Você pode renomear arquivos de acordo com comandos Perl arbitrários.mmv
, que pode renomear, copiar e vincular arquivos de acordo com vários padrões baseados em nome e tem muitas opções relacionadas ao que acontece se um nome de destino já existir. Observe que você deve usar aspas para proteger curingas da expansão pelo shell.zmv
é uma função zsh , disponível se e somente se seu shell for zsh. Ele pode corresponder a padrões zsh arbitrários (para que você possa combinar nomes de arquivos de acordo com expressões regulares arbitrárias, não apenas caracteres curinga, e pode corresponder aos arquivos por outros critérios, como datas e tamanhos).zmv
também pode copiar e vincular.Se você tem algum controle sobre as máquinas que usa, minha recomendação é usar o zsh como seu shell (ele tem outros benefícios sobre o bash) e colocar essas linhas no seu
~/.zshrc
:noglob
é um recurso zsh que diz ao shell para não expandir curingas no argumento do comando. Dessa forma, você pode escreverzmv *.txt \$1.txt
(você sempre precisará proteger o$
texto de substituição).fonte