Script Linux para mover arquivos de vários diretórios

Script Linux para mover arquivos de vários diretórios

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/directory1são movidos para/home/userA/directory1/directory2

Tenho que repetir isso para todos os usersitens abaixo /homee tenho que pular o usuário se directory2nã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 d1e 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 d1houver alguns espaços você precisa fazer mais ginástica e protegê-los com um \(assim você pode escrever for i in /home/*/directory\ with\ spaces; do).
  • Tente escrever echo $directory2 ; exitem 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.

informação relacionada