Tengo un directorio con muchos archivos y directorios. Para ordenarlo, voy a poner todos esos archivos en un directorio, así que iba a hacer algo como esto:
$ ls | wc -l
123
$ mkdir new_directory
$ mv * ./new_directory
Sin embargo, obviamente, que no va a funcionar porque entonces se va a tratar de moverse new_directoryen new_directory. ¿Hay alguna forma simple de hacer lo que quiero en una línea sin que tenga que copiar y pegar todos los archivos y directorios en ese directorio?

Respuestas:
Tu
comando realmente funcionará; solo imprimirá una advertencia de que no puede mover ese directorio dentro de sí mismo.fuente
git mvdebe usar la-kbandera, ya que git fallará de forma predeterminada, no solo escupe una advertencia. Entonces tendrás que hacergit mv -k * ./new_dir.Un forro rápido y sucio.
fuente
Si solo está buscando los archivos (es decir, no directorios), entonces
Es la solución más portátil. Para la velocidad, debe mover find y xargs, con -print0 y -0, pero solo si tiene GNU find y xargs.
fuente
find- aunque definitivamente he estado en sistemas que no tienen uno, lamentablemente :(Las veces que tuve este problema, hice uno de los siguientes:
o
La segunda forma aprovecha los comodines que omiten los nombres de archivo que comienzan con '.'
fuente
qué pasa:
IOW, no mueva el contenido a un nuevo directorio, pero coloque este directorio dentro de uno nuevo.
fuente
De manera similar a la respuesta de @ Rembrane (aunque no de una sola línea):
Esto debería ser 100% portátil, incluso si
findlamentablemente está ausente de su sistema.fuente
Mis sugerencias: como han dicho otros,
funcionará encontrar IFF la expansión total es lo suficientemente corta.
De lo contrario, puede probar este que escala a un número mucho mayor de archivos:
Explicación
fuente
-print0y-0y todavía se rompe.Utilizar:
Desde la
xargspágina del manual:fuente
Para evitar el mensaje de error y mantenerlo simple:
hará lo mismo pero evitará el mensaje de error (a menos que tenga puntos en los nombres de sus carpetas, supongo).
fuente