Recopile archivos de varios directorios diferentes y colóquelos en un solo lugar

Recopile archivos de varios directorios diferentes y colóquelos en un solo lugar

Tengo una gran cantidad de libros electrónicos que están muy desorganizados. Algunos de ellos están solos en sus propios directorios, algunos están corruptos, algunos directorios están vacíos. ¿Cómo recopilo mis libros electrónicos de todos estos directorios diferentes y los coloco todos en una carpeta para poder leerlos y reorganizarlos? Preferiría usar comandos nativos de GNU o un script bash.

Respuesta1

Supongo que al menos los tiene todos en varios subdirectorios bajo una única carpeta principal. Algo como ~/mybooks. Si es así, puedes hacer esto:

find ~/mybooks -name '*.pdf' -or -name '*.epub' -exec mv -t ~/newdir {} +

Eso encontrará todos los archivos o directorios cuyo nombre termine en .pdfo .epuben el directorio ~/mybooksy los moverá al directorio ~/newdir. Si puede tener directorios cuyo nombre termine en .pdfo .epub, agregue la -type fdirectiva para obtener solo archivos:

find ~/mybooks -type f -name '*.pdf' -or -name '*.epub' -exec mv -t ~/newdir {} +

Respuesta2

Para mover todos los archivos con ciertas extensiones en un árbol de directorios (es decir, en un directorio y sus subdirectorios de forma recursiva) a un solo directorio, en zsh:

mv -i source/**/*.(pdf|epub) destination/

El destinationdirectorio ya debe existir. Puede omitir la source/parte si desea recopilar archivos en el directorio actual y sus subdirectorios. Si desea mover todos los archivos independientemente de su nombre, pero no los directorios:

mv -i source/**/*(.) destination/

En fiesta:

shopt -s extglob globstar
mv -i source/**/*.@(pdf|epub) destination/

Estos comandos pueden quejarse de que la línea de comando es demasiado larga si tiene muchos archivos. En este caso, puede llamar finden lugar de utilizar globbing recursivo.

find source -name '*.pdf' -o -name '*.epub' -exec mv -i -t destination/ {} +
find source -type f -exec mv -i -t destination/ {} +

Si la estructura de directorios existente contiene cierta información, entonces, en lugar de mover los archivos, puede que le resulte más conveniente crearenlaces durosoenlaces simbólicos.

Para crear enlaces físicos, llame lnen lugar de mv -i. Con enlaces duros, cada archivo estará presente en ambos lugares a la vez. Si elimina el archivo original o el nuevo, el otro permanece: las dos ubicaciones del archivo están en pie de igualdad. Puede saber que un archivo tiene enlaces físicos porque el número en la segunda columna en el resultado ls -les mayor que 1.

Para crear enlaces simbólicos, primero cambie al directorio de destino y llame a ln -susando .(que representa el directorio actual) como destino. Un enlace simbólico es un archivo que simplemente dice "mira este archivo de allí". Si elimina el enlace simbólico, eso no afecta el archivo original. Si mueve o elimina el archivo original, el enlace simbólico queda colgado (es decir, sigue ahí pero ya no apunta a un archivo).

Para eliminar directorios vacíos bajo un directorio, puede usar

find /some/directory -depth -type d -empty -delete

información relacionada