Eu tenho um diretório de vários GB que raramente é acessado, mas quando for, gostaria de poder ler os arquivos nele rapidamente, em vez de ter que esperar. Como os arquivos raramente são acessados, eles não estarão no cache do sistema de arquivos, mas gostaria de sugerir que o Linux os pré-carregue no cache do sistema de arquivos antes de acessá-los.
Alguns podem argumentar que terei que esperar para carregá-los pela primeira vez e por isso não estou economizando tempo - basta dizer que no meu caso de uso específico posso automatizar isso para que não seja uma questão de salvar hora do sistema, é uma questão de economizar o tempo do usuário (já que ele não precisa esperar se os arquivos estiverem armazenados em cache).
Também percebo que o cache do sistema de arquivos não é uma garantia sem o uso de algo como tmpfs, é uma sugestão para o sistema operacional, e estou bem com isso.
Então parece que o método óbvio seria fazer:
tar -cf - /mydirectory > /dev/null
No entanto, quando faço isso, o comando retorna imediatamente, mesmo para um diretório de vários GB. Parece que o bash está vendo que a saída está sendo direcionada para /dev/null e otimizando todo o comando, então tar nem está lendo o diretório.
Qual é um comando simples para fazer o sistema operacional ler todos os arquivos em um diretório?
Responder1
Não é o bash fazer essa otimização, é o GNU tar. Ele reconhece quando sua saída é /dev/null
e não lê o conteúdo dos arquivos.
Faça com que a saída não seja /dev/null
:
tar -cf - /mydirectory > /dev/zero
Ou use uma ferramenta diferente, como
find . | cpio -o >/dev/null
find . -type f -exec cat {} + >/dev/null