題 訪問“未命名”文件


我在某個目錄中有這種情況:

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

如何訪問第二個條目,該條目似乎沒有文件名?


4
2017-08-21 08:16


起源


關於什麼 mv "" "newname"?或者文件名可能由空格組成?嘗試 ls | wc 或類似的東西 - mveroone
@Kwaio您不能擁有一個空名稱的文件,或者至少 mv "" 不會承認空的論點。 alk,你能用一個inode列表嗎? ls -i?要移動文件還是重命名? - slhck
你怎樣得到 Juni 要么 Jan.。看起來不對。 - user568109
@ user568109: Juni 和 Jan. 是德國人。 - alk
該文件是如何創建的? unix.stackexchange.com/questions/66965/files-with-empty-names - Ciro Santilli 新疆改造中心 六四事件 法轮功


答案:


運行示例以創建名為“非破壞空間”的文件並重命名:

$ 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

exec 如果只有一個匹配,它的形式才有意義,但除非存在指向同一文件的硬鏈接,否則inode編號在該分區上應該是唯一的。你可以先運行find without arguments來測試這一點,看看你是否得到了多個匹配項。如果是這種情況,您可以例如精煉 find 模式只匹配您想要的文件。

由於重命名不依賴於文件名的確切字符,因此輸入奇怪的代碼點應該沒有問題。


7
2017-08-21 09:59



非常感謝! find . -inum <inode> -exec mv {} gatya \; 做到了。請看我的評論 jaychris 回答一些背景。 - alk


我會嘗試“ls -1a> / tmp / list”和hexdump來查看是否有問題。文件名可能是空格和製表符的序列。如果hexdump將文件名顯示為空格(比如1個空格),那麼執行“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
新

2
2017-08-21 09:47



原來文件名是 ^?。但是要抓取文件我必須重命名,但無法進入 ^? 通過鍵盤,所以我成功地使用了“inode” - 方法提出的方法 丹尼爾安德森。不管怎麼說,還是要謝謝你。 - alk
如果它的一些特殊性格如 ^? 你也可以重定向輸出 ls 對文件進行編輯,使其只包含帶有奇怪字符的文件名,並在命令中使用它: mv $(cat file) new_name (bash語法,你也可以使用反引號,但在這裡我不能在反引號中添加反引號:) - Marki555
@ Marki555為什麼不發布這個作為另一個答案。這是一種聰明而簡單的方法。 :-) - alk