Comment obtenir un nom de fichier en utilisant UNIX?

Je dois obtenir un nom de fichier à partir d’un répertoire pour que le fichier soit traité sur mon système UNIX. Il n’y aura qu’un seul fichier dans le répertoire et son nom changera dynamicment (par une méthodologie externe non nommée).

S’il vous plaît laissez-moi savoir comment cela peut être fait.

S’il n’y a qu’un seul nom de fichier qui ne commence pas par un . , puis:

 filename="$(ls $directory)" 

Cela capture la sortie de ls . En raison de la limitation “un fichier”, elle est sûre même si le nom contient des nouvelles lignes, des espaces, des tabulations, etc. Avec plusieurs fichiers, l’parsing de la sortie de ls est problématique.

Si vous voulez le nom de chemin plutôt que le nom de fichier, vous pouvez utiliser:

 filename=$directory/* 

Encore une fois, ce n’est sûr qu’en raison de la limitation «un fichier». Il n’est pas possible d’utiliser ceci pour faire la distinction entre “il y a un fichier dans le répertoire et son nom est * ” et le cas d’erreur “il n’y a aucun fichier dans le répertoire”. Avec ls , si la chaîne est vide, il n’y a pas de fichier.

Si le nom du fichier peut commencer par . , alors la vie est beaucoup plus difficile; vous utilisez probablement:

 filename=$(cd $directory; basename "$(find . -type f)") 

Encore une fois, ceci est sûr uniquement à cause de la limite «un fichier». S’il peut y avoir plusieurs fichiers, vous devez utiliser d’autres techniques.

 for fn in * do filename="$fn" done