Tengo 291 archivos numerados (comenzando en 001 - título y terminando en 291 - título) que necesitan moverse a directorios separados. (001 a 021 a la carpeta 1, 022 a 053 a la carpeta 2, no son necesariamente el mismo número de archivos cada vez).
Pensé que podría hacerlo de una manera asquerosa como esta: ls | head -n 21 | sed -r 's|(.*)|mv \1 /path/to/folder1|' | sh
Estoy casi seguro de que hay una mejor manera, entonces, ¿cuál sería?
EDITAR: Eso hubiera funcionado bien, pero recordé ...
No estoy atrapado usando una terminal, así que usé un administrador de archivos para hacer clic y arrastrar. Sin embargo, la pregunta sigue en pie.
ls -l | grep ^- | wc -l
obtener el número de líneas.Respuestas:
Como dijiste que no siempre son exactamente 21 archivos de los que necesitas mover los archivos manualmente, y para hacerlo de manera efectiva puedes usar la expansión de llaves :
fuente
file{001..21}name
, no tiene que usar comodines. De todos modos, feliz de que te haya funcionado.Esto moverá los archivos como lo describió (excepto que el segundo rango sería 022 a 042 para los segundos 21 archivos).
fuente
Lo que quiero decir es mover muchos archivos (como diez mil o un millón), Shell se quejará de la lista de archivos demasiado tiempo si usas {1..20}, así que
En zsh , puede cargar el mv incorporado:
después de hacer eso, puedes usar comandos como:
o si está escribiendo algunos scripts de shell, puede hacer algo como esto:
si no está usando zsh, puede consultar /unix/128559/solving-mv-argument-list-too-long
fuente