Question Accéder à un fichier "sans nom"


J'ai cette situation dans un certain répertoire:

$ ls -al
...
drwxr-xr-x   2 me users         8192 Juni 28 15:27 tmp
-rw-r--r--   1 me users          439 Jan.  3  2013
...

Comment puis-je accéder à la deuxième entrée, qui semble n'avoir aucun nom de fichier?


4
2017-08-21 08:16


origine


qu'en est-il de mv "" "newname"? ou peut-être le nom de fichier est-il constitué d'espaces? essayer ls | wc ou quelque chose de similaire - mveroone
@Kwaio Vous ne pouvez pas avoir un fichier avec un nom vide, ou au moins mv "" ne reconnaîtrait pas l'argument vide. alk, pouvez-vous faire une liste d'inode avec ls -i? Voulez-vous déplacer le fichier ou le renommer? - slhck
Comment avez-vous Juni ou Jan.. N'a pas l'air bien. - user568109
@ user568109: Juni et Jan. sont allemands. - alk
Comment ce fichier a-t-il été créé? unix.stackexchange.com/questions/66965/files-with-empty-names - Ciro Santilli 新疆改造中心 六四事件 法轮功


Réponses:


Un exemple d’exécution pour créer un fichier nommé "espace non fractionné" et le renommer:

$ ls -1 # Each file on a separate row
testfile
$ touch   # I'm actually writing the character u00a0 here
$ ls -1
testfile
 
$ ls -i # Print inodes
2031842 testfile
2023653  
$ find . -maxdepth 1 -inum 2023653 -exec mv {} hithere \;
$ ls -i1
2023653 hithere
2031842 testfile

le exec Dans sa forme, cela n'a de sens que s'il existe une seule correspondance, mais le numéro d'inode doit être unique sur cette partition, sauf s'il existe des liens matériels vers le même fichier. Vous pouvez tester cela en exécutant find sans arguments pour voir si vous obtenez plusieurs correspondances. Si tel est le cas, vous pouvez par ex. affiner le find modèle pour correspondre uniquement au fichier que vous voulez.

Comme le changement de nom ne dépend pas des caractères exacts du nom de fichier, la saisie de points de code étranges ne devrait poser aucun problème.


7
2017-08-21 09:59



Merci beaucoup! find . -inum <inode> -exec mv {} gatya \; l'a fait. S'il vous plaît voir mon commentaire sur Jaychris répondez à quelques questions. - alk


Je voudrais essayer "ls -1a> / tmp / list" et hexdump pour voir si quelque chose se présente. Il est possible que le nom du fichier soit une séquence d'espaces et d'onglets. Si le hexdump affiche le nom du fichier comme des espaces (par exemple 1 espace), faites un "mv \ somename"

ls -1

ls -1> / tmp / list
cat / tmp / list

hexdump / tmp / list
          00 01 02 03 04 05 06 07 - 08 09 0A 0B 0C 0D 0E 0F 0123456789ABCDEF

00000000 20 0A {------.
mv \ new {------
ls -1
Nouveau

2
2017-08-21 09:47



Il s'est avéré que le nom du fichier était ^?. Cependant, pour récupérer le fichier, j'ai dû le renommer, mais je n'ai pas pu entrer ^? via le clavier donc j'ai utilisé avec succès l’application "inode" proposée par Daniel Andersson. Merci quand même. - alk
Si c'est un personnage spécial comme ^? vous pouvez également rediriger la sortie de ls dans un fichier, éditez-le pour qu'il contienne uniquement le nom du fichier avec des caractères étranges et utilisez-le dans votre commande: mv $(cat file) new_name (la syntaxe bash, vous pouvez aussi utiliser des backticks, mais ici je ne peux pas mettre de backticks à l’intérieur des backticks :) - Marki555
@ Marki555 pourquoi ne pas poster ceci comme une autre réponse. C'est une approche intelligente et simple. :-) - alk