Estoy intentando crear una secuencia de comandos para mover archivos una vez que se colocan en un directorio al subdirectorio. Los archivos
de ejemplo
colocados en /home/userA/directory1
se mueven a/home/userA/directory1/directory2
Tengo que repetir esto para todos los users
siguientes /home
y tengo que omitir al usuario si directory2
no existe.
Mi guión hasta ahora
#!/bin/bash
directory="/home/*/directory1"
directory2="/home/*/directory1/directory2/."
if [ $(ls -1A $directory | wc -l) -gt 0 ] ;
then
find $directory -type f -exec rsync --remove-source-files {} $directory2 \; &>/dev/null ;
fi
El problema que tengo con el script anterior es que mueve todos los archivos a uno de los archivos directory2
.
Respuesta1
Supongo que en el home de algunos de tus usuarios existe un directorio llamado d1
y dentro de este un subdirectorio llamado d2
.
Supongo que quieres hacer algo similar a
#!/bin/bash
for i in /home/*/d1 ; do
if [ -d "$i/d2" ]; then
# echo "$i/d2"
find "$i" -maxdepth 1 -type f -exec mv {} "$i/d2" \;
fi
done
Nota:
- Si en el nombre real de
d1
hay algunos espacios necesitas hacer algo más de gimnasio y protegerlos con un\
(para que puedas escribirfor i in /home/*/directory\ with\ spaces; do
). - Intente escribir
echo $directory2 ; exit
en su guión anterior y comprenderá por qué se comporta de manera diferente a lo que esperaba. Más información sobreExpansión del nombre del archivo.