Solução "simples"
ls -1 /Dropbox/apache2-backup-*
deve ordenar alfabeticamente por nome, por exemplo, por data (uma vez que a data é formatada com o dígito mais significativo à esquerda). Você pode, então, obter o mais antigo, canalizando para head -1
(supondo que não haja novas linhas nos nomes dos arquivos). Geralmente, canalizar a partir de ls
é uma má ideia, mas deve estar bem, neste caso, já que você sabe que não há caracteres especiais nos nomes dos arquivos.
mv "$(ls -1 /Dropbox/apache2-backup-* | head -1)" /root/Dropbox-archive/
Eu provavelmente também recomendaria usar mv --no-clobber
(ou mv -n
), para que você não sobrescreva arquivos acidentalmente.
Solução "adequada"
Se você estiver realmente preocupado com caracteres especiais, use o seguinte em seu lugar.
to_move="$(find /Dropbox -maxdepth 1 -type f -name 'apache2-backup-*' -print0 | sort -z | tr 'mv "$(find /Dropbox -maxdepth 1 -type f -name 'apache2-backup-*' -print0 | sort -z | tr 'mv "$(ls -1 /Dropbox/apache2-backup-* | head -1)" /root/Dropbox-archive/
\n' '\nto_move="$(find /Dropbox -maxdepth 1 -type f -name 'apache2-backup-*' -print0 | sort -z | tr 'mv "$(find /Dropbox -maxdepth 1 -type f -name 'apache2-backup-*' -print0 | sort -z | tr '%pre%\n' '\n%pre%' | head -1 | tr '%pre%\n' '\n%pre%')" /root/Dropbox-archive/
\n' '\n%pre%' | head -1 | tr '%pre%\n' '\n%pre%')"
mv "$to_move" /root/Dropbox-archive/
' | head -1 | tr '%pre%\n' '\n%pre%')" /root/Dropbox-archive/
\n' '\n%pre%' | head -1 | tr '%pre%\n' '\n%pre%')"
mv "$to_move" /root/Dropbox-archive/
Explicação
-
find /Dropbox -maxdepth 1 -type f -name 'apache2-backup-*' -print0
: retorna arquivos normais (-type f
) em/Dropbox
sem descer para subdiretórios (-maxdepth 1
), que correspondem ao padrão-name 'apache2-backup-*'
. Delimite por caractere nulo, em vez de novas linhas-print0
. -
| sort -z
: classifique com base no caractere nulo (N.B. nem todos os tipos podem fazer isso) -
| tr '
: troca null e newlines para processamento por cabeçalho.| head -1
\n' '\n| tr '
'mv "$to_move" /root/Dropbox-archive/
\n' '\n%code%' - %code% : retorna a primeira linha.
- %code% : swap null e newlines de volta.
- %code% : faça o movimento!
Ou, em uma única linha:
%pre%