/ dev / null - como o diretório de lixo automático para mover arquivos?

1

Eu posso (redirecionar) a saída textual para /dev/null , a fim de me livrar dela. Isso é muito útil, pois dessa forma posso ativá-lo / desativá-lo facilmente no meu código bash.

Agora, tenho um script que processa arquivos e, depois de concluído, move-os para outro destino. Um exemplo simples ficaria assim:

source_dir=some/source/path
target_dir=some/target/path
for f in 'ls $source_dir'; do echo $f; mv $f $target_dir; done

Agora, quando decido que não estou mais interessado em mover os arquivos para o diretório de destino, mas para excluir o direcionamento de arquivos, qual é a maneira mais eficiente de fazer isso (em termos de linhas de código a serem editadas)?

Posso pensar em colocar o comando mv em uma variável também:

process_cmd=echo
finnish_cmd=mv
source_dir=some/source/path
target_dir=some/target/path
for f in 'ls $source_dir'; do $process_cmd $f; $finnish_cmd $f $target_dir; done

Depois eu poderia mudar para algo como:

process_cmd=echo
finnish_cmd=rm
source_dir=some/source/path
target_dir=
for f in 'ls $source_dir'; do $process_cmd $f; $finnish_cmd $f $target_dir; done

Mas eu achei que seria ainda mais simples, se fosse possível especificar um diretório de destino de lixo /dev/null -like que é automaticamente limpo eventualmente (que é uma espécie de rm semântica com o comando mv ):

process_cmd=echo
finnish_cmd=mv
source_dir=some/source/path
target_dir=/dev/null # <--- is there some sort of trash folder for such tasks?
for f in 'ls $source_dir'; do $process_cmd $f; $finnish_cmd $f $target_dir; done

Existe uma maneira definitiva de ir / uma melhor prática geral para um caso como este?

    
por moooeeeep 25.07.2013 / 13:57

2 respostas

3

Não há tal lugar para uma razão bastante direta: não há qualquer utilidade para um. Não há nenhuma situação em que eu possa pensar em onde você pode usar mv globalmente, mas não rm . Então, enquanto /dev/null existe porque atende a uma necessidade, /dir/garbage não porque não.

Claro, você poderia dizer que há uma necessidade nesta situação, relacionada com a questão: "qual é a maneira mais eficiente de conseguir isso (em termos de linhas de código para editar)?" Presumir que o mecanismo que determina quais arquivos devem ser movidos versus excluídos é se target_dir está definido ou não:

if [ -n "$target_dir" ]; then
    # move file
else
    # delete file
fi

Muito simples, e você não precisa editar novamente nada (presumo que por "editar" você não quis dizer algo sobre manutenção ou reduzir o número de linhas, porque fazer algo em uma maneira desajeitada, hackeada ou incorreta em nome de "manutenção mais simples" - ou, pior ainda, pseudo-esperteza - é oximorônica).

Dito isto, você poderia facilmente implementar seu próprio diretório de lixo executando um cron job como este uma vez por hora:

garbage_dir=/usr/local/garbage
for file in $garbage_dir/*; do
    rm -f -R $file;
done
    
por 25.07.2013 / 16:33
2

Acho que você está simplesmente procurando pelo diretório /tmp . Na maioria dos casos, qualquer coisa que você colocar lá será removida na próxima vez que você reiniciar. Os detalhes dependem do seu sistema operacional específico e são regidos pelo valor da variável $TMPTIME . Para muitas distribuições, o padrão é limpar /tmp a cada inicialização porque $TMPTIME está definido como 0. Na maioria (senão em todas) distribuições, isso é definido no arquivo /etc/default/rcS .

Então, faça algo assim (note que estou usando o shell globbing e não analisando ls ):

process_cmd=echo
finish_cmd=mv
source_dir=some/source/path
target_dir=/tmp
for f in $source_dir/*; do $process_cmd "$f"; $finish_cmd "$f" $target_dir; done
    
por 25.07.2013 / 14:42