¿Hay alguna manera de mv
, cp
o alguna operación de archivo, de modo que pueda especificar todos los archivos que no quiero que se vean afectados?
Por ejemplo, decir que tengo una carpeta con los archivos file1
, file2
y file3
, y quiero mover file1
y file2
en alguna parte. En lugar de nombrar explícitamente los archivos para mover ( mv file1 file2 /path/to/destination
), quiero nombrar los archivos para que no se muevan y hacer que todos los demás en la carpeta se muevan ( mv --some-switch file3 /path/to/destination
)
command-line
rename
scp
Deslizamiento
fuente
fuente
mv file1 file2 /path/to/destination
eso no hará lo que quieres que hagaRespuestas:
Puede usar los patrones de globbing avanzados en algunos shells para hacer coincidir todos los archivos en un directorio, excepto los que coinciden con un patrón en particular. Por ejemplo, en ksh, bash o zsh, el comando
moverá todos los archivos
/source
a/destination
excepto los archivos que coincidan*.bak
. En zsh, también puede escribir/source/^*.bak
si se ejecuta por primera vezsetopt extended_glob
, y de manera más general (una vez mássetopt extended_glob
)/source/*~*.bak
(o/source/a*~*.bak
para todos los archivos cuyo nombre comienza cona
excepción de los.bak
archivos, etc.).Zsh tiene un comando de copia / movimiento / enlace masivo que se puede utilizar, entre otros, para mover todos los archivos, excepto los que coinciden con un patrón. Por ejemplo, el siguiente comando mueve todos los archivos excepto
*.bak
de/source
atarget
y agrega.bak
a su nombre en el proceso:Hay varios comandos llamados
rename
flotando. En Debian y Ubuntu,/usr/bin/rename
es un script perl que mueve archivos a un nuevo nombre generado por una expresión perl. Puede excluir el cambio de nombre de los archivos al no generar un nuevo nombre si se va a excluir el archivo. Por ejemplo, el siguiente comando (usando esterename
programa en particular ) mueve todos los archivos excepto*.bak
de/source
a/target
:Puede usar el
find
comando para seleccionar los archivos que desea mover. Por ejemplo, el siguiente comando mueve todos los archivos normales excepto*.bak
en/source
o un subdirectorio/target
(tenga en cuenta que la estructura del directorio está contraída):o (más eficiente si hay muchos archivos para mover)
rsync
es una generalizacióncp
yscp
con reglas de inclusión / exclusión muy potentes. Por ejemplo, el siguiente comando copia todos los archivos excepto*.bak
en/source
o un subdirectorio/target
, respetando la estructura del directorio:pax
es (entre otras cosas) otrocp
con esteroides. Sus reglas de exclusión no son tan poderosas como las de rsync, pero tiene la capacidad adicional de cambiar el nombre de los archivos a medida que se copian. Si cambia el nombre de un archivo a la cadena vacía, se excluye de la copia. Por ejemplo, el siguiente comando copia todos los archivos excepto*.bak
en/source
o un subdirectorio en/target
, y cambia el nombre de los archivos de.bak
pasada.El ejemplo anterior tiene el desafortunado efecto secundario de crear directorios llamados
foo.bak
, que se pueden evitar combinandofind
conpax
:fuente
find
comando debe terminar en\;
+
inmediatamente después{}
.