Je voudrais sortir la liste des éléments dans un dossier de la manière suivante:
"filename1" "filename2" "file name with spaces" "foldername" "folder name with spaces"
En d'autres termes, les noms des éléments doivent figurer sur une seule ligne, entourés de guillemets (simples ou doubles) et divisés par des espaces.
Je le sais
find . | xargs echo
imprime la sortie sur une seule ligne, mais je ne sais pas comment ajouter des guillemets autour du nom de chaque élément.
Ce code fait partie d'un script bsh. La solution peut donc consister en un ensemble de commandes et utiliser des fichiers temporaires pour stocker une sortie intermédiaire.
Merci beaucoup pour toute suggestion.
A bientôt, Ana
cela devrait marcher
find $PWD | sed 's/^/"/g' | sed 's/$/"/g' | tr '\n' ' '
MODIFIER:
Cela devrait être plus efficace que le précédent.
find $PWD | sed -e 's/^/"/g' -e 's/$/"/g' | tr '\n' ' '
La solution de @ Timofey fonctionnerait finalement avec un tr et devrait être la plus efficace.
find $PWD -exec echo -n '"{}" ' \; | tr '\n' ' '
Vous pouvez aussi simplement utiliser find "-printf", comme dans:
find . -printf "\"%p\" " | xargs your_command
où:
%p File's name.
Cela entourera tous les fichiers trouvés avec des guillemets et séparera chaque élément par un espace. Ceci évite l'utilisation de plusieurs commandes.
Essaye ça.
find . -exec echo -n '"{}" ' \;
Vous pouvez utiliser l'option GNU ls
--quoting-style
pour obtenir facilement ce que vous recherchez. De la page de manuel:
--quoting-style=Word
utilisez le style de citation
Word
pour les noms d'entrée:literal
,locale
,Shell
,Shell-always
,Shell-escape
,Shell-escape-always
,c
,escape
Par exemple, en utilisant la commande ls --quoting-style=Shell-escape-always
, votre sortie devient:
'filename1' 'filename2' 'file name with spaces' 'foldername' 'folder name with spaces'
En utilisant --quoting-style=c
, vous pouvez reproduire exactement votre exemple souhaité. Toutefois, si la sortie doit être utilisée par un script Shell, vous devez utiliser l'un des formulaires qui échappe correctement aux caractères spéciaux, tels que Shell-escape-always
.
EDIT:
La réponse suivante génère une LIST séparée par une nouvelle ligne au lieu d’une seule ligne.
| tr '\n' ' '
)Une méthode moins mentionnée consiste à utiliser l'option -d
(--delimiter
) de xargs
:
find . | xargs -I@ -d"\n" echo \"@\"
-I@
capture chaque résultatfind
sous la forme@
, puis nous l'avons renvoyé avec des guillemets
Avec cela, vous pouvez appeler n'importe quelle commande tout en ajoutant des guillemets aux arguments.
$ find . | xargs -d"\n" testcli.js
[ "filename1",
"filename2",
"file name with spaces",
"foldername",
"folder name with spaces" ]
for f in *; do printf "'%s' " "$f"; done; echo
Ou, grâce à Gordon Davisson :
printf "'%s' " *; echo
La echo
de fin consiste simplement à ajouter une nouvelle ligne à la sortie.
find . | sed "s|.*|\"&\"|"
Brève description:
Nous prenons le résultat du modèle. * Et le mettons entre guillemets.
La bonne source est sed .
Description détaillée:
Modèle: s/one/ONE/
essayer
ls | sed -e 's/^/"/g' -e 's/$/"/g' | tr '\n' ' '