Je fais ce qui suit: mais je veux que le Je peux travailler partiellement autour de celui-ci avec GLOB: P> -f code> soit insensible à la casse. C'est-à-dire que si le fichier est / etc / oonefile code>, je veux -f -f à reconnaître / etc / oonefile code>. P> shopt -s nocaseglob
TARG='/etc/somefile'
MATCH=$TARG* #assume it returns only one match
if [[ -f $MATCH ]] ; then
echo "File exists"
fi
6 Réponses :
Ne sachant pas comment utiliser uniquement des évaluations de shell. Mais le GREP peut être insensible à une casse, donc un script qui invoque le grep, la recherche et le WC peut répondre à votre demande. P>
Vous pouvez utiliser l'option NOCASMATCH
shopt -s nocasematch for file in * do case "$file" in "/etc/passWd" ) echo $file;; esac done
Je ne pense pas que cela fonctionne depuis que le GLOB ne retourne pas des chemins absolus.
Le problème est que votre système de fichiers em> est sensible à la casse. Le système de fichiers ne fournit que deux manières pertinentes d'obtenir un fichier: soit vous spécifiez un nom de fichier précon, sensible à la casse et vérifiez son existence de cette façon, ou de lire tous les fichiers d'un répertoire, puis de vérifier si chacun correspond à un motif. En d'autres termes, il est très inefficace de vérifier si une version insensible à une casse d'un fichier existe sur un système de fichiers sensible à la casse. La coquille pourrait le faire pour vous, mais en interne, il lisait tout le contenu du répertoire et en vérifiant chacun un contre un motif. P> donné tout cela, cela fonctionne: P> if [[ -n $(find /etc -maxdepth 1 -iname passwd) ]]; then
echo "Found";
fi
Trouver / -Involename Code> Travaillera probablement aussi, mais serait grossièrement inefficace.
@Philipp: Ouais, comme je l'ai dit: "Sauf si vous voulez tout chercher de" / "en bas" ... et si vous avez des symboles circulaires, priez ...
Quelqu'un devrait probablement dire cela à Debian (PKG / Debian: OK; PKG / Debian: C'est bon d'aller!; PKG / Debian: Pourquoi pas ?!)
Ceci est très difficile à faire, en général, si le système de fichiers est sensible à la casse. Fondamentalement, vous avez une incidence sur chacun des répertoires d'ancêtre séparément. Voici un point de départ dans python code>:
cd /etc # using FreeBSD find find -x -L "$(pwd)" -maxdepth 1 -type f -iregex "/EtC/[^\/]*" -iname paSSwd
Et voici un point de départ à l'aide de bash:
Jetez un coup d'œil à Stackoverflow.com/a/12953235/848072 pour une analyse approfondie de l'insensibilité Trouver B >