Créez un répertoire séparé pour jouer (pour faciliter le nettoyage plus tard, principalement); cela utilise la valeur de $TMPDIR
si elle est définie, sinon /tmp
:
mkdir "${TMPDIR-/tmp}/testing"
cd "${TMPDIR-/tmp}/testing"
Créez des fichiers séparés mais qui se ressemblent en raison des espaces (espace, tabulation, retour à la ligne, retour chariot, retour arrière):
touch -- a b 'a ' 'b ' 'a b' 'a b' $'a\bb'
touch -- a$'\xe2\x80\x82'b a$'\xe2\x80\x83'b a$'\t'b a$'\n'b a$'\r'b
Nous remercions Patrick pour ce qui précède . Les deux codes hexadécimaux sont des séparateurs d'espace UTF-8 appelés écrou et mouton ; "Dans un contexte bidirectionnel, il agit comme un espace blanc et n'est pas reflété. Le ou les glyphes peuvent, dans certaines circonstances, être confondus avec 20 autres glyphes."
Créez un fichier simple et un qui s'étendrait au premier s'il était traité comme un glob:
touch -- x '[x]'
Nous remercions Wumpus Q. Wumbley pour ce qui précède .
Dans la même veine:
touch -- 'a?b' 'a*b'
Merci à dave_thompson_085 pour ce qui précède dans les commentaires ici.
touch -- foo\`echo\ malicious\`bar
Nous remercions Godlygeek pour ce qui précède .
Un nom de fichier qui se développera vers quelque chose de différent (et une exécution potentiellement arbitraire!) S'il est évalué dans un contexte shell:
touch '$( echo boom )'
Utilisation:
touch -- single\'quote double\"quote back\\slash
pour intercepter les tentatives de mettre un nom de fichier entre guillemets sans échapper les guillemets.
touch -- -a -b -c -r -R - a=x
Nous remercions Stéphane Chazelas pour ce qui précède .
Créez un canal nommé et un lien symbolique (pour créer des fichiers qui ne sont pas "normaux"):
mkfifo fifo
ln -s a alink
Créez des sous-répertoires contenant divers espaces blancs dans leurs noms, ainsi que des fichiers de jetons à l'intérieur:
mkdir subdir "subdir 1" "subdir 2" "subdir 3 " subdir$'\n'4
touch subdir/file0 "subdir 1"/file1 "subdir 2"/file2 "subdir 3 "/file3 subdir$'\n'4/file4
Créez des noms de fichiers contenant uniquement *
(éventuellement problématique à supprimer), un nom de fichier composé uniquement d'un espace (normal!), D'un lien symbolique mort, d'un lien symbolique qui se boucle sur lui-même et d'un sous-répertoire avec un lien vers le répertoire parent:
touch -- '*' '**' '***' ' '
ln -s /does/not/exist dead
ln -s loop loop
mkdir subdir_with_link
(cd subdir_with_link && ln -s .. parent)
Plus de noms de fichiers divers. Les deux derniers sont unicode pour «barre oblique fractionnaire» et «barre oblique de division».
touch -- '(' '!' '!!' $'\xe2\x81\x84' $'\xe2\x88\x95'
Idées de Scott :
touch -- '-' '--' ';' '&' '|' '<' '>' '$' ')' '{' '}' = \\ '!' '#' '{a,b}'
Caractères inoffensifs dans certains endroits mais dangereux dans d'autres:
touch $'X\xa0Y' # non-breaking space in iso8859-1 which is considered
# "blank" and "space" in some locales
touch $'\xa3\x5c' $'\xa3\x60' # α and ε in BIG5 or BIG5-HKSCS charset, but
# �\ and �` in ASCII
Caractères qui trient de la même manière dans certains paramètres régionaux:
touch ① ② # sorts the same in GNU locales, order non-deterministic.
Fichiers qui échappent au .[!.]* *
globe (parfois utilisés pour développer des fichiers cachés et non cachés):
touch ..foo ...
a?b
eta*b
(cité bien sûr). @muru: les séquences d'octets E2 80 82/83 sont le codage UTF-8 de U + 2002 EN SPACE et U + 2003 EM SPACE-
et--
, bien que, selon les exigences du script, il soit peut-être impossible d'y accéder sans guide./
. Et je suis surpris qu'il y ait si peu avec la coquille non glob caractères spéciaux, comme;
,&
,|
,<
,>
,$
,(
,)
,{
,}
,=
,\
,!
et#
- par exemple{a,b}
.