Recherche de fichiers et d'impression seulement leur répertoire parent
J'ai les commandes suivantes. Là où le .user.log
fichier est présent, nous avons besoin d'imprimer les répertoires parents (j'.e hht
et wee1
.) Comment cela peut-il être fait?
$ cd /nfs//office/ && find . -name '.user.log'
./hht/info/.user.log
./wee1/info/.user.log
OriginalL'auteur Rajeev | 2012-03-07
Vous devez vous connecter pour publier un commentaire.
Ai-je raté quelque chose ici. Certes, tous cette expression et/ou de boucle n'est pas nécessaire, un one-liner va faire le travail. Aussi "pour les foo $()" solutions échouent lorsqu'il y a des espaces dans les noms de chemin.
Suffit d'utiliser dirname deux fois avec xargs, pour obtenir du parent parent...
Produit
En supposant que le ll vous consultez est couramment utilisé alias pour "ls-lA", alors non. xargs uniquement exécuter des commandes, pas d'alias. Cependant, vous pourriez faire "xargs-ls-lA" à la place...
Soyez averti,
-i
drapeau pourxargs
est répertorié comme obsolète, utilisez de préférence-I
drapeau à la place.merci, mis à jour répondre
OriginalL'auteur Adam
EDIT: Désolé manquer, que vous souhaitez que le grand-parent directory.
OriginalL'auteur trojanfoe
Vous pouvez le faire facilement avec les options de formatage de la
-printf
action defind
(voirman find
).De la page de man:
%h\n
imprime chemin d'accès de chaque fichier sur une nouvelle ligne.Veuillez noter que
-printf
est GNU seule. Il ne fonctionnera pas sur macOS (un système BSD).OriginalL'auteur rosencreuz
@trojanfoe a la bonne idée; cette est juste une façon de l'obtenir pour travailler en toute sécurité avec tout nom de fichier, et à peu près n'importe quelle commande à l'intérieur de la boucle:
Si vous voulez faire l'écho seul le unique noms:
Dans le cas où vous voulez faire quelque chose avec stdin l'intérieur de la boucle. C'est expliqué sur le lien ci-dessus.
OriginalL'auteur l0b0
OriginalL'auteur xda1001
Vous pourriez faire quelque chose comme ceci:
où la
xargs
utiliseexpr match
pour extraire la partie qui commence avec.
jusqu'à ce que le premier match de répertoire entre les caractères barre oblique (/dir/
).Une version alternative à l'aide de
sed
serait comme suit:OriginalL'auteur jcollado
OriginalL'auteur A T