
Dado um ponto de montagem como /dev/sda1, como posso listar o conteúdo deste sistema de arquivos usando shell script. Meu objetivo é excluir o arquivo mais antigo desta unidade.
Responder1
/dev/sda1
é um dispositivo de bloco. Pode conter um sistema de arquivos. Quando montado, esse sistema de arquivos pode estar disponível em algum ponto de montagem como /home
, /
, e dentro desse sistema de arquivos, alguns diretórios podem, por sua vez, ser alguns pontos de montagem para outros sistemas de arquivos (podem estar em outros dispositivos de bloco ou virtuais como /proc
, ou rede...).
Se /dev/sda1
estiver montado em /
, para remover o mais antigo (em termos da hora da última modificação)regulararquivo, em um sistema GNU recente, você pode fazer:
find / -xdev -type f -printf '%T@:%p\0' |
sort -zn |
sed -z 's/[^:]*://;q' |
xargs -r0p rm -f
O -xdev
sinalizador diz find
para manter um sistema de arquivos, ou seja, não descer para outros sistemas de arquivos montados /
neste caso.
Observe que outros sistemas de arquivos podem ocultar arquivos no sistema de arquivos do seu ponto de montagem. Por exemplo, se /dev/sda1
estiver montado, /
mas contiver um /home/some-old-file
e /dev/sda2
estiver montado em /home
, /home/some-old-file
não estará acessível.
Pelo menos no Linux, você pode contornar isso montando bind /
em outro diretório:
mount --bind / /mnt/side-access-to-root
Então todos os arquivos no sistema de arquivos montado em /
estarão disponíveis através do /mnt/side-access-to-root
.
Então, você pode omitir -xdev
e usar zsh
globbing para remover o arquivo mais antigo:
rm -i /mnt/side-access-to-root/**/*(D.Om[1])
Responder2
/dev/sda1 não é um ponto de montagem, ele aponta para a partição da sua unidade.
Para montar seu disco use
mount -t vfat(OR THE TYPE OF YOUR DRIVE) /dev/sda1 /path/to/mount/to
Então, para listar todos os arquivos em um caminho, você pode usar
ls
No entanto, para excluir todos os arquivos anteriores a X dias, você pode usar:
find /path/to/files* -mtime +x -exec rm {} \;