LINUX: collega tutti i file da uno a un'altra directory [chiuso]


123

Voglio collegare ( ln -s) tutti i file che si trovano /mnt/usr/lib/in/usr/lib/

Ci sono molti file, come può essere fatto velocemente? :)


Quanti file sono "lotti" e quanto velocemente ritieni "veloci"?
Eric Smith,

4
Questo è 50:50 se si adatta a "serverfault" o "superuser", ma non è in programmazione, quindi non per stackoverflow.
Marc Gravell

Risposte:


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

Immagino che questo appartenga al superutente, però.


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

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

1
punterà all'altra cartella in modo permanente?
nmkyuppie

@YuPPie Immagino che crei solo un collegamento fisico a ogni file nella directory. (questo è quello che volevo oggi, quindi +1: D)
Nome visualizzato

2
@SargeBorsch Crea collegamenti simbolici (gli hard link sono diversi).
jsejcksn

90

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

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

Nota che questa è un'estensione GNU non trovata in POSIXcp .


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

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

2
Buona risposta. Può essere utilizzato anche per creare collegamenti fisici con -l invece di -s.
Fax


15

Le soluzioni pubblicate non collegheranno alcun file nascosto. Per includerli, prova 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 di collegamento solo (in modo che se si crea un file all'interno di una directory, è davvero in /usr/libnon /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

2
Credo che questo dovrebbe funzionare anche come un modo per inserire caratteri jolly nei file nascosti, se hai attivato il globbing esteso in bash. Corrisponde a tutto ciò che inizia con 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.