LINUX: lier tous les fichiers d'un répertoire à un autre [fermé]


123

Je veux lier ( ln -s) tous les fichiers qui se trouvent /mnt/usr/lib/dans/usr/lib/

Il y a beaucoup de fichiers, comment le faire rapidement? :)


Combien de fichiers sont "lots" et à quelle vitesse vous estimez "rapide"?
Eric Smith

4
C'est 50:50 si cela conviendrait à "serverfault" ou "superuser", mais ce n'est pas de la programmation, donc pas pour stackoverflow.
Marc Gravell

Réponses:


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

Je suppose que cela appartient au super-utilisateur, cependant.


6
Cela n'inclut pas les fichiers cachés et lie des répertoires entiers. Si l'un de ces éléments n'est pas ce que vous voulez, voyez ma réponse. Sinon, c'est le moyen le plus court.
Cascabel

Vous avez raison. Mais les bibliothèques ne sont généralement pas cachées. Dans tous les cas, les dotfiles sont impliqués, votre solution est plus pratique.

1
va-t-il pointer vers l'autre dossier en permanence?
nmkyuppie

@YuPPie Je suppose, cela crée simplement un lien direct vers chaque fichier du répertoire. (c'est ce que je voulais aujourd'hui, donc +1: D)
Nom d'affichage

2
@SargeBorsch Il crée des liens symboliques (les liens physiques sont différents).
jsejcksn

90

GNU cpa une option pour créer des liens symboliques au lieu de copier.

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

Notez qu'il s'agit d'une extension GNU introuvable dans POSIXcp .


4
Votre répertoire actuel doit être / usr / pour créer un lien symbolique de cette façon
Soul_man

@caf Si la destination est un dossier existant, le dossier lib est créé à l'intérieur du dossier / usr /
Tamil Selvan C

2
Bonne réponse. Peut également être utilisé pour créer des liens physiques avec -l au lieu de -s.
Fax


15

Les solutions publiées ne lieront aucun fichier caché. Pour les inclure, essayez ceci:

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

Si vous souhaitez créer de manière récursive les répertoires et ne lier que les fichiers (de sorte que si vous créez un fichier dans un répertoire, il ne l'est vraiment /usr/libpas /mnt/usr/lib), vous pouvez le faire:

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
Je pense que cela devrait également fonctionner comme un moyen de joker dans les fichiers cachés, si vous avez activé le globbing étendu dans bash. Il correspond à tout ce qui commence par un point, suivi de quelque chose d'autre que rien ou d'un autre point (c'est-à-dire qu'il exclut ./et ../):ln -s /mnt/usr/lib/.!(|.)* /usr/lib
Cascabel
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.