Estou tentando criar um script para mover arquivos assim que eles forem colocados em um diretório para um subdiretório
Exemplo
Arquivos colocados em /home/userA/directory1
são movidos para/home/userA/directory1/directory2
Tenho que repetir isso para todos os users
itens abaixo /home
e tenho que pular o usuário se directory2
não existir.
Meu roteiro até agora
#!/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
O problema que tenho com o script acima é que ele move todos os arquivos para um dos arquivos directory2
.
Responder1
Presumo que na home de alguns de seus usuários exista um diretório chamado d1
e dentro deste um subdiretório chamado d2
.
Suponho que você queira fazer algo semelhante 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
Observação:
- Se no nome real
d1
houver alguns espaços você precisa fazer mais ginástica e protegê-los com um\
(assim você pode escreverfor i in /home/*/directory\ with\ spaces; do
). - Tente escrever
echo $directory2 ; exit
em seu roteiro anterior e você entenderá porque ele se comporta de maneira diferente do que você espera. Mais informações emExpansão do nome do arquivo.