Tengo 220 directorios, cada uno con 2 archivos dentro. todos los archivos tienen la misma terminación (*.fq.gz). Quiero mover todos estos archivos a un directorio único.
Creo que podría hacer eso con un bucle de shell, pero no tengo idea de cómo hacerlo...
Respuesta1
Esto es algo que uso cuando no necesito tener mucho cuidado.
mkdir unique_dir && mv */*.fq.gz unique_dir/
A menos que me haya perdido algo.
Respuesta2
Tienes razón. Puedes realizar esta tarea con dos bucles for. Uno dentro del otro. Crearemos un script bash para hacer precisamente eso. Veamos cómo quedaría:
#!/bin/bash
for dir in */; do
echo "$dir"
cd "$dir"
for file in *; do
echo "moving $file"
mv $file ~/targetdir
done
cd ..
done
Si desea tener un script más rápido, simplemente elimine el eco del script. Hice esto para facilitar el seguimiento de su progreso.
Simplemente cree un archivo y copie estos comandos en él. Después de eso, otorgue permiso de ejecución chmod +x scriptfile
y ejecútelo ./scriptfile
en el directorio principal donde se encuentran los otros directorios. No olvide reemplazar targetdir y scriptfile con su directorio de destino y el nombre del archivo de script.
Si tiene más archivos en sus directorios, simplemente reemplácelos *
con *.fq.gz
en el for file
bucle y se repetirá solo a través de sus 2 archivos.
¡¡¡Advertencia!!! No cree su directorio de destino dentro del directorio principal porque también se repetirá dentro de él.
Editar: como sugirió @steeldriver, puede eliminar for dir
comandos y simplemente usar for file
comandos con */*.fq.gz
para tener un bucle más rápido. Decidí mantenerlos para un mejor seguimiento de lo que sucede dentro de los directorios.
Editar: mientras investigaba un poco sobre las páginas man y web de los comandos find y xarg respondidas por @waltinator, lo encontré más conveniente, más rápido y seguro. Incluso encontré una alternativa a xarg usando la opción -exec del comando buscar como find . -type f -name '*.fq.gz' -exec mv --backup=numbered --target-directory=$dest {} \;
.
Respuesta3
Cuando se trata de muchos archivos, o archivos con nombres divertidos, find
cuáles xargs
son las herramientas a utilizar. Lee man find;man xargs
y haz algo como:
dest=../destination # must be outside this directory tree
mkdir $dest
find . -type f -name '*.fq.gz' -print0 |\
xargs -0 --no-run-if-empty echo mv --backup=numbered --target-directory=$dest
Una vez que esté satisfecho con los resultados, reemplace " echo mv
" con solo " mv
".
Para excluir el $dest
directorio que se encuentra en dificultad actual, utilice --prune
:
find . -type d -name "$dest" -prune -o -type f -name '*.fq.gz' -print0 |\
xargs -0 --no-run-if-empty echo mv --backup=numbered --target-directory=$dest
Respuesta4
krusader can search files and save to a custom tab then you can select all of those (or filter the list) and move them to the destination
sudo apt install krusader
también podrías agregar
sudo apt install krename
vaya a las herramientas del directorio de origen superior, busque o haga clic en crtl+s para editar el cuadro de lista, seleccione todos los archivos, copie a otro panel o f5, otro panel es la otra pestaña que es el destino de origen