Faça links simbólicos de todos os arquivos, mas copie certas extensões

Faça links simbólicos de todos os arquivos, mas copie certas extensões

Estou me perguntando como seria capaz de vincular todos os arquivos em uma estrutura de diretório e também copiar arquivos de uma determinada extensão nesse diretório. Basicamente, estou vinculando todos os arquivos em /foo/a,b,c a /bar/a,b,c e depois copiando determinados arquivos com determinadas extensões.

Responder1

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

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

E então, 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 início com um único comando, mas aprendi alguns outros truques úteis com o find.

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/

A única coisa importante a notar é que, ao criar o link simbólico, você fornece o caminho real que os links seguirão para se relacionarem com foo/. Meu exemplo mostra links relativos quando estão lado a lado (também pode criar links simbólicos absolutos).

informação relacionada