dispositivo NAS Busybox

3

Eu tenho um dispositivo NAS que caiu no último final de semana. Os caras de TI aparentemente / talvez não recuperaram da maneira certa? Há cerca de 50.000 diretórios em um diretório "lost + found", cada um com um nome numérico como "# 4289756". Parece que todos os arquivos ausentes estão dentro desses diretórios, cada um com a data original e informações do proprietário (Linux). Eu preciso organizá-los para que eles sejam encontrados para o pessoal.

Meu objetivo é copiar / mover esses arquivos em uma estrutura para que cada funcionário tenha sua própria pasta com seus próprios arquivos e cada pasta seja dividida por mês.

O próprio dispositivo está executando um Busybox, uma versão simplificada do Linux que suporta apenas um subconjunto dos comandos Bash típicos. Eu pensei que poderia usar um script com o comando "find" para classificá-los por proprietário e data e depois canalizar isso para "-exec cp" para o local apropriado, mas parece que o Busybox não tem essa capacidade.

Aqui está uma sugestão que alguém tinha, mas supõe que os diretórios originais tenham os UIDs corretos, o que não é o caso.

cd /lost+found ; for i in *; do USER='ls -l $i | awk '{print $3}''; mkdir -p /home/$USER/recovered ; cp -a $i /home/$USER/recovered/$i ; done
    
por Gilles 25.05.2012 / 02:30

1 resposta

1

Cada appliance tem sua própria compilação do BusyBox com diferentes conjuntos de recursos, por isso não posso ter certeza do que o seu suporta. Se bem entendi, você tem diretórios como /lost+found/#123456 , e todos os arquivos desse diretório pertencem ao mesmo usuário. Aqui está um script não testado que despacha esses diretórios para a casa do usuário. Presumo que seus nomes de usuário não contenham espaços e que os diretórios iniciais dos usuários obedeçam à convenção /home/$username .

cd /lost+found
[ -d /root/recovered ] || mkdir /root/recovered
for d in *; do
  username=$(ls -l "$d" | sed -e 's/^[^ ]  *[0-9][0-9]*  */' -e 's/ .*//' -e q)
  if [ -d "/home/$username" ]; then
    dest=/home/$username/recovered
  else
    homedir=/root/recovered/$username
  fi
  [ -d "$dest" ] || mkdir "$dest"
  cp -Rp "$x" "$dest"
done

Isso é quase o que você postou, exceto que o comando awk está imprimindo o proprietário dos arquivos várias vezes. Você pode usar awk '1 {print $3}' ou sed como acima. Se você está pegando a propriedade errada, ou você escreveu ls -ld no comando que você executou, ou a sua descrição da situação (“todos os arquivos ausentes estão dentro desses diretórios, cada um com a data original e informações do proprietário”) está errado. Também tornei o script mais robusto, em arquivos específicos pertencentes a usuários do sistema serão copiados em /root/recovered .

Se isso não funcionar para você, certifique-se de explicar claramente o que está errado. Copie e cole qualquer mensagem de erro ou ls output.

    
por 28.05.2012 / 03:36