Quiero cambiar el nombre de los archivos para cambiar su extensión, buscando efectivamente lograr
mv *.txt *.tsv
Pero al hacer esto obtengo:
* .tsv no es un directorio
Me resulta un tanto extraño que los primeros 10 éxitos de Google Show mvfuncionen así.

Respuestas:
Cuando emite el comando:
el shell, supongamos que bash, expande los comodines si hay archivos coincidentes (incluidos los directorios). La lista de archivos se pasa al programa, aquí
mv. Si no se encuentran coincidencias, se pasa la versión no expandida.Nuevamente: el shell expande los patrones, no el programa.
Un montón de ejemplos es quizás la mejor manera, así que aquí vamos:
Ejemplo 1:
Ahora lo que sucede en la
mvlínea es que el shell se expande*.txta los archivos coincidentes. Como no hay*.tsvarchivos que no se modifiquen.El
mvcomando se llama con dos argumentos especiales :argc: Número de argumentos, incluido el programa.argv: Una matriz de argumentos, incluido el programa como primera entrada.En el ejemplo anterior sería:
El
mvprograma verifica si el último argumento*.tsv, es un directorio. Como no es así, el programa no puede continuar ya que no está diseñado para concatenar archivos. (Por lo general, mueva todos los archivos a uno). Tampoco cree directorios por capricho.Como resultado, aborta e informa el error:
Ejemplo 2
Ahora si en cambio dices:
El
mvcomando se ejecuta con:Ahora, nuevamente,
mvverifique si*.tsvexiste. Como no lo hace, el archivofile1.txtse mueve a*.tsv. Es decir: el archivo se renombra*.tsvcon el asterisco y todo.Ejemplo 3
Si en cambio dijiste:
El
mvcomando se ejecuta con:Como
*.tsvahora es un directorio, los archivos terminan siendo movidos allí.Ahora: usando comandos como
some_command *.tsvcuando la intención es mantener el comodín, uno siempre debe citarlo. Al citar, evita que los comodines se expandan si hubiera coincidencias. Por ejemplo, decirmkdir "*.tsv".Ejemplo 4
La expansión se puede ver aún más si lo hace, por ejemplo:
Ejemplo 5:
Ahora: el
mvcomando puede y funciona en varios archivos. Pero si hay más de dos, el último debe ser un directorio de destino. (Opcionalmente, puede usar la-t TARGET_DIRopción, al menos para GNU mv.)Entonces esto está bien:
Aquí
mvse llamaría con:y todos los archivos terminan en el directorio
foo.En cuanto a tus enlaces. Ha proporcionado uno (en un comentario), donde
mvno se menciona en absoluto, perorename. Si tiene más enlaces que podría compartir. Así como para las páginas de manual donde usted afirma que esto se expresa.fuente
Sé que esto no responde a su pregunta, pero en caso de que estuviera buscando otra forma de cambiar el nombre de los archivos en comparación con su ciclo de solución, ¿por qué no usarlo
find? He usado este comando muchas veces para reemplazar extensiones de archivo en directorios grandes con cientos de miles de archivos en él. Esto debería funcionar en cualquier sistema compatible con POSIX:Desglose de comandos:
Ejemplo:
fuente
file.abc->blub.xyzen múltiples subdirectorios:find . -name "file.abc" -exec sh -c 'mv "$1" "$(dirname $1)/blub.xyz"' _ {} \;mv *.txt *.tsvno funcionamvsolo puede cambiar el nombre de un archivo a la vez. Has entendido mal las explicaciones o están equivocadas.mmvyrenamepuede cambiar el nombre de varios archivos a la vez. Pero hay dos versiones derenamealrededor que se llaman de manera diferente. Debería haber muchas preguntas sobre eso aquí.fuente
rename, nomv.mv *.txt *.tsvmv(por lo general) no se ve*.txtni*.tsvlos nombres de archivo expandidos por shell. El número de archivos a los que se expanden estos comodines sería "aleatorio". La única situación en la que esto funciona es si hay un archivo con el nombre*.txtque será renombrado (literalmente)*.tsv(sin citar labashopciónnullglobno debe establecerse).foo.txty uno nombradobaz.tsvelmv *.txt *.tsvhará que la carpeta.tsvde archivos ...Por ejemplo, si usted tiene
asd.txtyqwe.txtarchivos en el directorio cuando se ejecuta el comandomv *.txt *.tsv, se trata de mover estos dos archivos en un directorio llamado*.tsv. Debido a que no existe tal directorio, da un error.fuente
rename(1)renamees un guión perl de Larry Wall, el creador de perl. Toma una expresión regular Perl y opera en el nombre del archivo.Instalación
Debian / Ubuntu
Si necesita instalar
renameen Debian / Ubuntu, puede hacerlofuente
Otra opción a considerar es usar:
*.txtarchivos*.tsvmientras conserva sus atributos usando la-pbandera.*.txtmvque simplemente cambia el / directorio / nombre de archivo sin mover realmente los archivos a menos que estén en una partición diferente.fuente