Extraction de l’inode à partir de la commande ls

J’essaye d’extraire l’inode de la commande ls:

"ls -i" 

out mis:

 1234 File name with space 2345 File name 

Afin d’extraire, j’ai essayé d’utiliser la commande de coupure comme suit:

 ls -i | cut -d" " -f1 

La commande ci-dessus ne fonctionnait pas parce que le nom des fichiers contenait un nombre d’espaces différent. A partir de la page de manuel, j’ai trouvé qu’en spécifiant “-Q” dans la commande ls, le nom du fichier serait double:

 ls -iQ 1234 "File name with space" 2345 "File name" 

Je ne peux pas trouver un moyen d’utiliser cette option. Toute aide serait grandement appréciée.

Merci

Mise à jour 1 Il semble que l’espace de nom de fichier n’ait pas été à l’origine du problème. C’est la taille du numéro d’inode. Par exemple:

 ls -iQ 2321352 "My Cheat Tables" 507896 "My Data Sources" 

Notez l’espace avant le nombre “507896”. Par conséquent, pour le premier fichier, l’inode est dans le champ 1 (-f1) et pour le deuxième fichier, le numéro d’inode est sur le second champ (-f2).

Updat 2 (Ma solution)

J’ai trouvé la solution .. xD la commande comme suit:

 ls -iQ | cut -d ' "' -f1 

ci-dessus imprimerait uniquement inode. Cependant, j’aimerais savoir s’il existe une manière appropriée ou meilleure de le faire. S’il vous plaît, répondez sur ce post si vous connaissez la bonne manière. Je suis nouveau à Unix, et j’aimerais bien l’apprendre de la manière appropriée. Merci.. 🙂

Vous pouvez également utiliser la commande stat (1) .

 stat -c %i "File name with spaces" 

Si vous avez un nombre inconnu d’espaces de fin (ou de délimitation), vous pouvez utiliser awk pour obtenir la colonne souhaitée:

 ls -iQ1 | awk '{print $1}' 

autre que cut , awk ignore tout nombre d’espaces blancs consécutifs, vous n’avez donc pas besoin de deviner le décalage.

Une solution encore meilleure consiste à demander explicitement les informations dont vous avez besoin plutôt que d’parsingr les résultats:

 find . -type f -printf '%i\n'