Me pregunto cómo podría vincular simbólicamente todos los archivos en una estructura de directorio y luego también copiar archivos de una determinada extensión en ese directorio. Básicamente estoy vinculando simbólicamente todos los archivos dentro de /foo/a,b,c a /bar/a,b,c y luego copiando ciertos archivos con ciertas extensiones.
Respuesta1
Desde el directorio /bar, para crear todos los enlaces simbólicos para todo menos estas extensiones.
find ../foo/ -type f ! -name '*.txt' ! -name '*.baz' -exec ln -s '{}' \;
Y luego copiar todas las extensiones, el mismo comando en su mayor parte.
find ../foo/ -type f \( -name "*.txt" -o -name "*.baz" \) -exec cp '{}' ./ \;
Editar: Copie toda la estructura del directorio, vincule simbólicamente algunos archivos, copie otros. Al principio no estaba seguro de si esto era posible con un solo comando, pero aprendí algunos otros trucos útiles con buscar.
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/
Lo único importante a tener en cuenta es que al crear el enlace simbólico usted proporciona la ruta real que tomarán los enlaces para relacionarse con foo/. Mi ejemplo muestra enlaces relativos cuando están uno al lado del otro (también podrían crear enlaces simbólicos absolutos).