2009-08-28 14 views
90

voglio collegare (ln -s) tutti i file che si trovano in/mnt/usr/lib/in/usr/lib/LINUX: link di tutti i file da uno all'altro directory

Ci sono un sacco di file come farlo in fretta? :)

+0

Quanti file sono "lotti" e quanto velocemente si ritengono "veloci"? –

+3

Questo è 50:50 se si adatta "serverfault" o "superuser", ma non è programmazione, quindi non per stackoverflow. –

risposta

145
ln -s /mnt/usr/lib/* /usr/lib/ 

Immagino, questo appartiene al superutente, però.

+1

Questo non include i file nascosti e collega intere directory. Se uno di questi non è quello che vuoi, vedi la mia risposta. Altrimenti, è il modo più breve. – Cascabel

+0

Hai ragione. Ma le biblioteche non sono nascoste di solito. In ogni caso i dotfile sono coinvolti, la tua soluzione diventa più utile. – flokra

+1

punta all'altra cartella in modo permanente? – nmkyuppie

11

ln -s/mnt/usr/lib/*/usr/lib/

14

Le soluzioni postato non si collegheranno tutti i file nascosti. Per includerli, provate questo:

cd /usr/lib 
find /mnt/usr/lib -maxdepth 1 -print "%P\n" | while read file; do ln -s "/mnt/usr/lib/$file" "$file"; done 

Se vi capitasse di voler creare in modo ricorsivo le directory ei file solo di collegamento (in modo che se si crea un file all'interno di una directory, è davvero in /usr/lib non /mnt/usr/lib), si potrebbe fare questo:

cd /usr/lib 
find /mnt/usr/lib -mindepth 1 -depth -type d -printf "%P\n" | while read dir; do mkdir -p "$dir"; done 
find /mnt/usr/lib -type f -printf "%P\n" | while read file; do ln -s "/mnt/usr/lib/$file" "$file"; done 
+1

Credo che questo dovrebbe funzionare anche come un carattere jolly nei file nascosti, se hai globbing esteso attivato in bash. Corrisponde a tutto a partire da un punto, seguito da qualcosa di diverso da niente o da un altro punto (cioè esclude '. /' E '../'): 'ln -s/mnt/usr/lib /.! (|.) */usr/lib' – Cascabel

68

GNU cp ha un'opzione per creare collegamenti simbolici invece di copiare.

cp -rs /mnt/usr/lib /usr/ 

Nota questa è un'estensione GNU non trovata in POSIX cp.

+2

La directory corrente dovrebbe essere/usr/per creare un collegamento simbolico in questo modo –

+0

@caf Se la destinazione è una cartella esistente, la cartella lib viene creata all'interno della cartella/usr / –