Symlink todos os arquivos, mas copie certas extensões

2

Eu estou querendo saber como eu poderia ligar simbolicamente todos os arquivos em uma estrutura dir e, em seguida, copiar arquivos de uma certa extensão nesse diretório. Estou basicamente ligando simbolicamente todos os arquivos dentro de / foo / a, b, c para / bar / a, b, ce copiando sobre determinados arquivos com certas extensões.

    
por Mike 27.07.2011 / 20:44

1 resposta

0

No diretório / bar, crie todos os links simbólicos para tudo, exceto essas extensões.

find ../foo/ -type f ! -name '*.txt' ! -name '*.baz' -exec ln -s '{}' \;

E, em seguida, para copiar todas as extensões, o mesmo comando na maior parte.

find ../foo/ -type f \( -name "*.txt" -o -name "*.baz" \) -exec cp '{}' ./ \;

Editar : Copie toda a estrutura de diretórios, crie links simbólicos para alguns arquivos, copie outros. Não tinha certeza se isso era possível no começo com um único comando, mas acabei de aprender alguns outros truques úteis para encontrar.

find foo/ -type d -printf "mkdir -vp 'bar/%p'\n" -o -type f ! -name "*.txt" ! -name "*.baz" -printf "ln -vs '../%p' 'bar/%p'\n" -o -type f \( -name "*.txt" -o -name "*.baz" \) -printf "cp -v %p bar/%p\n" | sh
mv bar/foo/* bar/ && rm -R bar/foo/

Apenas o importante a notar é quando você faz o link simbólico que você dá o caminho real que os links levarão para se relacionar com foo /. Meu exemplo mostra links relativos quando eles estão lado a lado (também pode fazer links simbólicos absolutos também).

    
por 27.07.2011 / 23:06