Je veux rediriger la sortie de la find
commande vers la cat
commande pour pouvoir imprimer les données du fichier donné.
Ainsi, par exemple, si la sortie de find est /aFile/readme
alors le chat doit être interprété comme cat ./aFile/readme
. Comment puis-je le faire instantanément?
Dois-je utiliser des tuyaux?
J'ai essayé des versions de ceci:
cat | find ./inhere -size 1033c 2> /dev/null
Mais je suppose que c'est complètement faux? Bien sûr, je suis sûr que la sortie est un seul fichier et non plusieurs fichiers.
Alors, comment puis-je faire ça? J'ai cherché sur Google et je n'ai pas trouvé de solution, probablement parce que je n'ai pas bien cherché: P
cat
de »-n
option me surprend. J'adore lire des questions aléatoires.Substitution de commande
Une autre option consiste à utiliser la substitution de commande . Envelopper une commande dans
$()
exécutera la commande et remplacera la commande par sa sortie.va devenir
Cela équivaut plus ou moins à utiliser l'ancien style de commandes d'encapsulation avec des ticks arrière:
Plus de détails sur les documents liés ci-dessus
Bash effectue l'expansion en exécutant la commande dans un environnement de sous-shell et en remplaçant la substitution de commande par la sortie standard de la commande, avec tous les retours à la ligne supprimés. Les sauts de ligne incorporés ne sont pas supprimés, mais ils peuvent être supprimés lors du fractionnement des mots. La substitution de commande
$(cat file)
peut être remplacée par l'équivalent mais plus rapidement$(< file)
.Lorsque l'ancienne forme backquote de substitution est utilisé, conserve son sens anti - slash littéral , sauf si elle est suivie par
$
,`
ou\
. La première citation inverse non précédée d'une barre oblique inverse met fin à la substitution de commande. Lors de l'utilisation du$(command)
formulaire, tous les caractères entre parenthèses constituent la commande; aucun n'est traité spécialement.Les substitutions de commandes peuvent être imbriquées. Pour imbriquer lorsque vous utilisez le formulaire guillemets inversés, échappez aux guillemets intérieurs avec des barres obliques inverses.
Si la substitution apparaît entre guillemets, le fractionnement de mots et l'expansion de nom de fichier ne sont pas effectués sur les résultats.
Voir cette autre réponse pour quelques bons exemples d'utilisation.
la source
find
trouve trop de fichiers, cela générerait une erreur "liste d'arguments trop longue" en essayant d'invoquercat
. Il aurait également des problèmes de gestion des noms de fichiers contenant des espaces blancs et éventuellement des noms de fichiers contenant des caractères de remplacement de nom de fichier.Cela affichera le nom et le contenu des fichiers texte (ascii) de manière récursive uniquement.
Encore une tentative
la source
Utilisez pipe et xargs
S'il échoue en raison d'un manque d'autorisations, vous pouvez utiliser sudo pour vous assurer que vous êtes autorisé à exécuter la commande find sur le répertoire que vous recherchez.
la source
/tmp/ /dev/urandom /pg_hba.conf
, cela permettra à root de vider tout le contenu de/dev/urandom
. Le pire peut probablement se faire en fonction du contexte.xargs
ne devrait presque jamais être utilisé sans le-0
cas échéant. Aussisudo xargs
serait mieux quexargs sudo
. Et ce/*
serait mieux comme/
.find|xargs
sans-0
devrait vraiment être interdite), d'où le vote négatif . La sortie defind
sans-print0
n'est pas post-traitable de manière fiable.-print0
n'est pas standard. Cela dit, la normesudo find / -name pg_hba.conf -exec cat {} +
pourrait également vous faire vider le contenu de/dev/urandom
(par exemple, si quelqu'un a créé un lien symbolique/tmp/pg_hba.conf
vers celui-ci et qu'il n'y a pas de moyen portable facile de contourner cela qui n'a pas au moins de condition de concurrence).sudo
"juste au cas où", d'accord?sudo rm -rf /