Si j'ai un répertoire plein de fichiers et de sous-répertoires. Quelle est la meilleure façon de lister uniquement les fichiers normaux qui tombent alphabétiquement devant une chaîne donnée?
Actuellement, le mieux que je puisse faire en utilisant bash est le suivant:
for x in `find . -maxdepth 1 -type f | sort`
do
if [[ "$x" > './reference' ]]
then
break
fi
echo $x
done
J'ai l'impression qu'il existe une façon plus concise de le faire, mais je ne sais pas trop ce que c'est. Des idées?
awk '$0 >= "'"${FROM}"'" && $0 <= "'"${TILL}"'"'
Avec
sed
c'est plus concis:Ce qui signifie (après le tri) supprimer la ligne de référence (ou plus) et toutes les lignes suivant la dernière ligne.
La commande sed 'd' est utilisée ici avec une plage d'adresses, où '/^./reference/' est le début et '$' est la fin de la plage. (Et «$» comme adresse signifie la dernière ligne.)
la source
Réponse zsh obligatoire, en utilisant le
.
qualificatif glob pour sélectionner uniquement les fichiers réguliers ete
pour sélectionner davantage parmi les correspondances:la source
par exemple.
script-name "$HOME" "reference"
...find
ne produit pas toujours le début./
, comme dans le cas defind bin
, oufind /tmp
. Donc, si vous ne voulez que les noms de base des fichiers, cela fonctionne.mise à jour: Ajout de tolower () pour permettre une comparaison insensible à la casse, ce qui produit le classement alphabétique mentionné dans la question ...
Il suffit de le diriger
sort
aprèsawk
, si vous en avez besoin.la source
$0 < ref
qu'elle fonctionne, mais comme il n'y a pas d'espace dans la sortie de find, le champ $ 2 n'existe pas. Suis-je en train de manquer quelque chose?