Eu tenho um grande diretório "myfiles" cheio de documentos diversos e não quero modificar sua estrutura.
Portanto, criei (vários) outros diretórios para cada classe de documentos. Por exemplo, eu tenho um diretório "images" que possui links simbólicos para cada arquivo .jpg
ou .cr2
no diretório "myfiles", além de outros arquivos descritivos para cada link simbólico (com o mesmo nome de arquivo) com descrição e outros metadados. Os links simbólicos no diretório / images podem ter um nome diferente do arquivo vinculado original.
Estou tentando encontrar a maneira mais simples de garantir que todos os arquivos de imagem no diretório "myfiles" tenham um link simbólico para o diretório "images".
Veja um exemplo da estrutura de pastas
/myfiles/a.doc
/myfiles/b.jpg
/myfiles/c.cr2
/myfiles/d.mov
deve resultar
/images/b_800x600.jpg
/images/b_800x600.desc
/images/c_3820x5640.cr2
/images/c_3820x5640.cr2
command-line
files
find
symlink
Robert Alexander
fonte
fonte
find /myfiles -type f
em um arquivo e usáfind /images -type l -exec readlink {} \; | egrep myfiles
-lo para obter uma lista de arquivos com links simbólicos/images
e iterar sobre os resultados, fazendo umsed
em cada um para excluir os caminhos no primeiro arquivo salvo, já que eles já tem o link simbólico e os arquivos restantes são os que não possuem o link simbólico.ls -l
você pode ver a contagem de hardlinks na segunda coluna.rm
esses diretórios de link simbólico e use,pax -rwl -s "\|.*regex|modifes_filename|" /path/to/myfiles/*.jpg /path/to/jpg_dir
por exemplo, para obter links físicos com nomes de arquivos alterados programaticamente apenas para aqueles arquivos que correspondem aos seus jpgs. Você pode obter muito mais do que fora dela - como lotes com base em tempos de mudança e etc.Respostas:
Se eu entendi bem a pergunta, você precisa de arquivos em meus arquivos que não possuem links simbólicos nas imagens:
Há uma ressalva nessa abordagem se você tiver o arquivo a.jpg no diretório myfiles / 1 e tiver um link simbólico para esse arquivo no diretório images / 3 ou simplesmente em images / o arquivo não será relatado com o link simbólico ausente.
fonte
Presumo que os arquivos abaixo
myfiles
não sejam links simbólicos e que nenhum dos nomes de arquivos contenha novas linhas. (Minha abordagem ainda pode funcionar se essas suposições forem violadas, mas ficarem mais complicadas.) Suponho também que você tenha oreadlink
utilitário comum e que suporte-f
para canonizar caminhos, como é o caso do Linux (GNU e BusyBox), mas não por exemplo, OSX.Crie uma lista de arquivos e classifique-a como uma boa medida:
Crie uma lista de destinos de links simbólicos, com caminhos absolutos.
Liste os arquivos que não estão vinculados:
Se você usar um shell que suporte a substituição de processos, poderá colocar tudo em um comando:
Se os links abaixo
/images
forem absolutos, você poderá usarreadlink
sem a-f
opção, disponível em * BSD e OSX.fonte
comm
comando, mas não vou agora que vejo que você já o fez. No entanto, o redirecionamento desort
não faz sentido; as substituições do processo não produzirão nada. Além disso, você pode adicionar muitos diretórios ao lado,/images
se desejar encontrar arquivos nos/myfiles
quais não há links simbólicos para qualquer um de vários diretórios além/images
.readlink -f