J'ai un dossier SOURCE qui contient plusieurs dossiers de sous-niveau, chacun avec ses propres fichiers.
Je veux copier ce dossier dans un nouveau dossier COPY où je dois copier la structure du répertoire mais garder les fichiers sous forme de liens symboliques vers les fichiers d'origine dans SOURCE et ses sous-dossiers.
Réponses:
Voici la solution sur Linux non intégré et Cygwin:
Notez que SOURCE doit être un chemin absolu et avoir une barre oblique de fin. Si vous voulez donner un chemin relatif, vous pouvez utiliser
la source
SOURCE
est un chemin relatif, alors je pense que oui. Essayez-le et si cela ne fonctionne pas, je vous suggère de poser une nouvelle question. Référencez celui-ci par tous les moyens.Il existe au moins 2 utilitaires standard pour créer une arborescence de répertoires fantômes d'une arborescence existante, donc pas besoin d'écrire du code ici.
Il y a
lndir(1)
d'abord lexutils-dev
paquet. Il utilise des liens symboliques vers des fichiers. Depuis la page de manuel:Une alternative peut-être meilleure consiste à simplement utiliser
cp
les bonnes options comme le suggère la réponse acceptée. Je vais juste donner quelques détails plus utiles, espérons-le:Si vous ne vous souciez pas de conserver tous les attributs (propriétés / autorisations, heures), remplacez l'
a
option (équivalente à-dr --preserve=all
) parr
(récursive uniquement):la source
lndir
est également disponible en tant que script shell ici au cas où il ne serait pas installé: opensource.apple.com/source/X11/X11-0.46.4/lndir.sh?txtVous pouvez essayer quelques commandes de recherche comme celle-ci:
la source
Quelque chose comme ça fera ce dont vous avez besoin.
Les répertoires sont créés dans l'arborescence COPY cible. Tout le reste est lié par un lien symbolique vers le chemin absolu dans l'arborescence SOURCE. Assurez-vous que SOURCE et COPY sont spécifiés en tant que chemins absolus (en commençant par
/
).Si vous avez une grande arborescence à copier et que vous souhaitez un rapport d'avancement par répertoire, vous pouvez l'ajouter
echo "$ITEM" >&2;
juste avant lamkdir
commande.(J'ai regardé
cp
etcpio
mais aucun ne semble avoir une option pour lier à la source avec des liens symboliques.)la source
{ mkdir -p "$COPY/$ITEM"; continue; }
ksh
script ... mais il semble que ce soit également nécessairebash
. FixationS'il n'y a pas de répertoires vides dans SOURCE qui doivent être copiés
la source
cp
toute façon, pourquoi pascp -as
?Je commencerais par éclater le perl:
File::Find
est un module utile qui vous permet d'exécuter un sous-programme spécifique sur n'importe quel fichier d'une arborescence de répertoires. Dans ce cas, le sous vérifie s'il s'agit d'un répertoire - et s'il l'est, fait unmkdir
ou un fichier - auquel cas il fait un lien symbolique.la source
Il semble que vous recherchiez quelque chose comme l'outil
rsnapshot
; il crée des copies de répertoires arbitraires et utilise des liens physiques dans la mesure du possible. (Jetez un œil à la page de manuel pour voir si cela convient.)la source