Tengo la desgracia de provenir de un entorno de MS-DOS, pero al menos me hace apreciar lo mucho más poderoso que es Linux. He estado trabajando para que mi Linux-Fu esté a la par, pero hay un par de cosas que podrían hacerse con DOS que no estoy seguro de cómo lograr con más facilidad con Linux:
Cambiar el nombre de varios archivos: usar dos comodines
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
Sé que podría usar find -exec
aquí, pero es posible usar una sintaxis más corta, ¿tal vez mv
con algunas banderas o sintaxis especiales? Supongo que la clave para esto es el segundo *
comodín, ya que Linux no debería tener un problema con el primero (es decir, sé cómo seleccionar los archivos que quiero renombrar usando comodines)
Cambiar el nombre de un solo archivo: uso de un comodín
c:\> dir
Directory of c:\
file1.txt
c:\>rename file1.txt *.bak
c:\> dir
Directory of c:\
file1.bak
Esto sería especialmente útil al renombrar nombres de archivo largos y difíciles de manejar. Pensé que quizás podría usar mv file1.txt $1.bak
para terminar con file1.txt.bak
lo que también sería aceptable, pero no estoy seguro de que pueda hacer referencia al $1
parámetro en línea con un comando de shell. Nuevamente, en este caso particular, es conveniente cómo ms-dos bastardiza el *
comodín para ser utilizado como una especie de coincidencia de captura / reemplazo para parte del nombre de archivo.
Filtrado de listados de directorio con un comodín
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)
No estoy seguro de cuál es la sintaxis correcta para hacerlo ls
, o si es posible. Si hice algo así ls t*
, volverá a aparecer en los directorios a partir de t
. Mi solución alternativa ha estado usando find . --max-depth 1 -iname "t*"
o algo así ls -al | grep t
, ninguno de los cuales es tan corto y simple como dir t*
es.
Finalmente, sé que puedo configurar alias para acortar estos comandos largos, pero me gustaría aprender algunos linux-fu listos para usar para hacer estas cosas porque a veces estás conectado a un sistema remoto o estás trabajando En una nueva máquina.
Entonces, ¿cómo puedo mv
y ls
archivos de la misma manera que solía dir
y rename
archivos?
fuente
somefunc *.Ext
si ese patrón no coincide con ningún archivo, y juegue con comillas para ver si logra pasar un patrón ( sin tenerlo expandido) entre funciones. Consejo de seguridad: no lo use enrm
ningún lugar mientras experimenta con la expansión globular / shell :-)Una cosa a tener en cuenta cuando se trata de comodines es que el shell los expande. La aplicación no sabe si usó comodines o escribió los nombres. Por ejemplo, si escribe
rename *.txt *.bak
, elrename
comando ve algo asírename file1.txt file2.txt existingfile.bak
. Esa no es suficiente información para continuar.ls
Primero me ocuparé de la pregunta , porque es más simple. Si todo lo que quiere son los nombres coincidentes, entonces no los necesitals
, porque el shell ya está haciendo la expansión.Si desea obtener más información sobre los archivos, pase la
-d
opción als
, para decirle que no enumere el contenido de los directorios.No existe una utilidad estándar para renombrar archivos, porque los primeros sistemas unix no venían con uno. El método portátil para cambiar el nombre de los archivos utiliza un bucle y es un poco detallado:
Hay varias utilidades comunes para cambiar el nombre de los archivos, ninguno de los cuales está garantizado para instalarse en un sistema Unix determinado, pero todos son fáciles de instalar. Aquí están los principales:
rename
de lautil-linux
suite, disponible en todos los sistemas Linux no integrados (y en ningún otro lugar). En Debian y derivados (incluido Ubuntu), este comando se llamarename.ul
. Siempre que no se produzca.txt
otra extensión que no sea la extensión final, puede escribirrename
es un script de Perl que Debian y sus derivados se envían como/usr/bin/rename
. Puede cambiar el nombre de los archivos de acuerdo con los comandos arbitrarios de Perl.mmv
, que puede cambiar el nombre, copiar y vincular archivos de acuerdo con varios patrones basados en nombres y tiene muchas opciones relacionadas con lo que sucede si ya existe un nombre de destino. Tenga en cuenta que debe usar comillas para proteger los comodines de la expansión del shell.zmv
es una función zsh , disponible si y solo si su shell es zsh. Puede hacer coincidir patrones zsh arbitrarios (por lo que puede hacer coincidir nombres de archivos de acuerdo con expresiones regulares arbitrarias, no solo comodines, y puede hacer coincidir archivos por otros criterios como fechas y tamaños).zmv
También puede copiar y vincular.Si tiene algún control sobre las máquinas que usa, mi recomendación es usar zsh como su shell (tiene otros beneficios sobre bash) y poner estas líneas en su
~/.zshrc
:noglob
es una función zsh que le dice al shell que no expanda comodines en el argumento del comando. De esta manera puede escribirzmv *.txt \$1.txt
(siempre necesitará protegerlo$
en un texto de reemplazo).fuente