Eu tinha um diretório contendo cerca de 2000 arquivos.
Executei o seguinte comando para mover esses 2.000 arquivos para um diretório de destino:
find /opt/alfresco \
-type f \( -iname \*.pdf -o -iname \*.xml \) \
-exec mv {} /opt/alfresco/archived/2020-01-07 \; > /opt/alfresco/scripts/move.log
Mas, esqueci de anexar um /
no final do caminho de destino. Então, o que o comando acima fez é que ele criou um arquivo com o nome 2020-01-07
e escreveu alguns conteúdos binários nele que agora são ilegÃveis. E meus 2000 arquivos sumiram. O tamanho deste 2020-01-07
arquivo é 220 KB. Mas o tamanho desses 2.000 arquivos combinados era de aproximadamente 1 GB.
Existe alguma maneira de recuperar esses 2000 arquivos? Ou alguma maneira pela qual eu possa converter esse arquivo 2020-01-07
em um diretório 2020-01-07
com meus dados voltando?
Adicionar uma barra no final do caminho de destino
/opt/alfresco/archived/2020-01-07
teria feito omv
comando de erro, já que o2020-01-07
diretório evidentemente não existe. Isso teria salvo seus arquivos.Eles também teriam sido salvos se
/opt/alfresco/archived/2020-01-07
tivessem sido um diretório existente (independentemente de o caminho de destino ter uma barra no final ou não), e seus arquivos teriam sido movidos para esse diretório (as colisões de nomes de arquivos ainda podem ter sido um problema, conforme você move arquivos de vários diretórios para um único diretório). Isto é o que você queria fazer. O que você esqueceu de fazer foi criar esse diretório primeiro.Agora, como o diretório não existia, o que o
find
comando fez foi pegar cada arquivo XML e PDF individual, renomeá-lo para/opt/alfresco/archived/2020-01-07
e continuar fazendo o mesmo com o próximo arquivo, substituindo o anterior.O arquivo
/opt/alfresco/archived/2020-01-07
agora é o último arquivo XML ou PDF encontrado pelofind
.Observe também que, como você executou seu
find
comando em/opt/alfresco
, qualquer arquivo PDF ou XML abaixo desse caminho, por exemplo, em qualquer diretório abaixo/opt/alfresco/archived
de , teria o mesmo destino.Este é um erro tão fácil de fazer. Não há maneira conveniente de recuperar os arquivos perdidos além de restaurá-los de seus backups.
Se você não fizer backups de hora em hora de seus dados, esse pode ser um bom momento para começar a fazer isso. Eu recomendaria
restic
ouborgbackup
para fazer backups de arquivos pessoais, de preferência contra algum tipo de armazenamento externo ou pelo menos externo.As seguintes perguntas e respostas podem ser de alguma ajuda:
Em sua próxima reescrita deste script, você pode querer ignorar o
archived
subdiretório e usarmv -n -t
. Você também precisa explicitamente-print
os arquivos encontrados (ou usarmv -v
)find
, caso contrário, não produzirá sua localização:Algumas coisas dos comentários (abaixo) que podem ser úteis para saber:
Se GNU
mv
for usado com-t target
, ele falhará setarget
não for um diretório. Você usaria-exec mv -t /opt/alfresco/archived/2020-01-07 {} +
para mover vários arquivos de uma só vezfind
(o que também aceleraria a operação).Se o GNU
mv
for usado com-n
, ele se recusará a substituir os arquivos existentes.Nem são padrão (macOS e FreeBSD
-t
também ), mas isso não deve impedi-lo de usá-los em scripts que não precisam ser portáveis ​​entre sistemas.-n
-n