Con GNU mv :
find path_A -name '*AAA*' -exec mv -t path_B {} +
Eso utilizará la -execopción de búsqueda que reemplaza {}a cada resultado de búsqueda a su vez y ejecuta el comando que le das. Como se explica en man find:
-exec command ;
Execute command; true if 0 status is returned. All following
arguments to find are taken to be arguments to the command until
an argument consisting of `;' is encountered.
En este caso, estamos utilizando la +versión de -execpara ejecutar la menor cantidad de mvoperaciones posible:
-exec command {} +
This variant of the -exec action runs the specified command on
the selected files, but the command line is built by appending
each selected file name at the end; the total number of invoca‐
tions of the command will be much less than the number of
matched files. The command line is built in much the same way
that xargs builds its command lines. Only one instance of `{}'
is allowed within the command. The command is executed in the
starting directory.
+que hace el trabajo, puedes leer mi cita anterior o en suman findlugar-exec mv {} path_b +y estaba fallando con los errores de permisos. TBH, todavía no entiendo por qué, ¡pero-exec mv -t path_b {} +funciona de maravilla!-exec ... {} +, el{}tiene que ser lo último antes del+. Es por eso que usamv -t destdir {} +y nomv {} destdir +. En-exec mv {} destdir ';'cambio, se utilizó un resfriado , pero eso se habría ejecutadomvuna vez para cada archivo.También podrías hacer algo como a continuación.
Dónde,
-0Si hay espacios o caracteres en blanco (incluidas las nuevas líneas), muchos comandos no funcionarán. Esta opción se ocupa de los nombres de archivos con espacio en blanco.-IReemplace las ocurrencias de replace-str en los argumentos iniciales con nombres leídos de la entrada estándar. Además, los espacios en blanco sin comillas no terminan los elementos de entrada; en cambio, el separador es el carácter de nueva línea.Pruebas
Creé dos directorios como
sourcedirydestdir. Ahora, creé un montón de archivos dentrosourcedircomofile1.bak,file2.bakyfile3 with spaces.bakAhora, ejecuté el comando como,
Ahora, dentro de
destdir, cuando lo hagols, puedo ver que los archivos se han movido desourcediradestdir.Referencias
http://www.cyberciti.biz/faq/linux-unix-bsd-xargs-construct-argument-lists-utility/
fuente
Para beneficio de los usuarios de OS X que se encuentran con esta pregunta, la sintaxis en OS X es ligeramente diferente. Suponiendo que no desea buscar de forma recursiva en subdirectorios de
path_A:Si desea buscar todos los archivos de forma recursiva en
path_A:fuente
findque haya usado. Puntos-maxdepthpositivos : (especialmente si path_B es un subdirectorio, ¡evitamvintentar mover archivos que ya están allí!) Y usar \; (por lo que {} no tiene que ser el último parámetro ymvse puede usar la sintaxis normal )La
-execes la mejor manera de hacer esto. Si, por alguna razón, esta no es una opción, también puede leer los resultados en un bucle:Esa es la forma segura, puede tratar con nombres de archivos que contienen espacios, líneas nuevas u otros caracteres extraños. Una forma más simple, pero que falla a menos que los nombres de sus archivos consistan solo en caracteres alfanuméricos simples , es
Pero usa el bucle while.
fuente
your file names consist only of simple alphanumeric characters, por ejemplo, si llegaARG_MAXUsando solo características POSIX de
find(y también demv):Otras lecturas:
fuente
De otra manera
fuente