arquivos correspondentes para pastas

0

O Linux pode varrer dois diretórios? Depois de digitalizar, combine os dois diretórios com base nas semelhanças no nome do arquivo e transfira os arquivos.

Estou procurando transferir o arquivo "diretório" /seq0001.pdf para a pasta "diretório diferente" / 001 e "diretório" /seq0002.pdf para a pasta "diretório diferente" / 002 e.t.c

Quando o número de arquivo recém-incrementado é criado, eu gostaria de mover esse novo arquivo para o novo diretório.

A nova pasta não precisa ser criada. Como quando há um novo arquivo, algum outro trabalho está colocando informações nessa pasta e cria a nova pasta.

Eu sei como fazer uma função de movimento direto, mas isso só funcionaria para os arquivos especificados. Você pode mover os arquivos por uma correspondência em vez de ter que mover manualmente os arquivos todas as vezes?

    
por Ali 23.06.2014 / 05:10

1 resposta

0

Pode haver uma maneira de encurtar isso (na verdade, existem várias boas alternativas para analisar o nome do arquivo; verifique esta questão - Vou atualizar aqui assim que tiver uma chance), mas uma maneira é criar primeiro um script que lida com um único arquivo. Por exemplo, salve o seguinte como move.sh :

#!/bin/sh
subdir='echo -n "${1%.*}" | tail -c3'
mv -v "$1" "/path/to/$subdir"

Ajuste a gosto. Isso levará a parte do nome do arquivo antes do último "." e use os três caracteres mais à direita como o diretório de destino (por exemplo, "seq0002.pdf" vai para "/ path / to / 002").

O chmod 755 move.sh para torná-lo executável.

Eu recomendo colocar esse script em um diretório diferente para que ele não interfira. Então você pode usar, e. find para executá-lo em todos os arquivos ou apenas executá-lo em um arquivo por vez, por exemplo:

find . -maxdepth 1 -type f -exec /wherever/move.sh {} \;

Ou para um arquivo (e supondo que move.sh esteja no diretório atual):

./move.sh seq0001.pdf

Se você quiser escolher caminhos mais complexos, poderá estender o script, por exemplo:

#!/bin/sh
subdir='echo -n "${1%.*}" | tail -c3'

if [ $subdir = "001" ] ; then
    rootdir="/directory";
elif [ $subdir = "002" ] ; then
    rootdir="/another/place";
else
    rootdir="/default/root";
fi

mv -v "$1" "$rootdir/$subdir"

Novamente ajustando a gosto. As possibilidades são bastante ilimitadas.

    
por 23.06.2014 / 06:08

Tags