![轉到名稱未知的目錄](https://rvso.com/image/1346554/%E8%BD%89%E5%88%B0%E5%90%8D%E7%A8%B1%E6%9C%AA%E7%9F%A5%E7%9A%84%E7%9B%AE%E9%8C%84.png)
在解壓縮 tarball 時,我遇到了一個ls
報告為“??????????????? ??????” 的目錄。據推測,該名稱不是 unicode 的?無論如何,我無法找到存取該資料夾的方法。我試過了cd $(find -inum inode_number)
,但這給了我
"bash: cd: ./??????????: No such file or directory".
還有另一種方法可以直接透過索引節點號存取資料夾嗎?
答案1
能夠對任何目錄(或檔案)進行操作的通用方法是使用其索引節點號。
首先,使用 ls 取得相關資料夾的 inode:
ls -lia
-l
長列表(可選)-i
取得索引節點值-a
查看所有文件,甚至隱藏文件(可選)
在清單中,您將在第一列中看到一個很長的數字,如下所示:
2104697 drwx------ 2 user group 4096 date time WEIRD_DIRNAME
現在您可以使用以下命令變更到該目錄:
cd "$(find -inum ######)"
....但用您在目錄列表中獲得的長數字替換######。
當然,該命令不一定是cd
。它可能是rm
,cp
,mv
,ETC…
答案2
由於這些字符可能是國際字符,因此它們可能在 en_US 字符集中顯示為控制代碼,這就是 ls 將它們顯示為問號的原因。
這可能是由於您的發行版在全域設定檔中預設選擇了別名 ls。例如:
alias ls='ls -q'
您可以透過在 shell 中輸入以下內容來查看您的發行版是否已這樣做:
alias ls
這將列印出如下內容:
$ alias ls
alias ls='ls --color=auto'
下面連結的頁面建議,如果您執行“ls -b”,您將看到八進位控制碼,因此您至少知道正在使用哪些字元。
http://www.arsc.edu/arsc/support/howtos/nonprintingchars/
假設這不起作用,您還有另一個選項在靠近底部的地方提到:
直到現在我還不知道一個名為 OctalDump 的工具(在 Debian 上 - /usr/bin/od)
$ ls | od -b
將向您展示控製代碼的八進位形式。
$ ls | od -c
將向您顯示字符,包括末尾可能存在的任何隱藏的附加空格(請注意示例中末尾的額外空格)
一旦您知道正在使用哪些控製字元以及是否存在其他隱藏的空格,您就可以透過轉義控製字元來找到一種方法來 cd 到目錄。如果做不到這一點,您有幾個選項可以重新命名目錄。
上面的頁面還方便地提供了一種快速而骯髒的方法,用於通過mv 命令刪除控製字符,我認為只要您確實轉義空格,但不要轉義問號(從而使它們成為單個字符),它就可以工作通配符),並且只要該惡意目錄所在的目錄中不存在任何其他內容。這些明確要求的原因是因為您僅使用通配符和單一空格,因此您不希望通配符無意中匹配任何其他檔案或目錄。
如果上述方法不起作用,您幾乎可以肯定以不同的方式使用其他回覆中提到的 find 方法。您可以使用 inode 編號重命名它,而不是嘗試使用 inode 編號(這就是您所說的嘗試過的) cd 到目錄。請務必複製整套3上一頁中該指令的行(將「desired-name」部分替換為您想要重新命名的實際名稱)。
重命名目錄後,您應該能夠訪問它。我只能希望它不包含名稱中帶有控制代碼的文件,否則您必須對剛剛重命名的目錄中的每個文件(和/或子目錄)進行沖洗和重複,此時 for 循環將每個文件命名為數字(從1 開始遞增)可能是明智的做法。
答案3
“?”在shell中有特殊的意義,它的意思是「任何字符,包括無」。所以如果你的文件確實名為“?????????????????????”你可能必須逃避“?” (還有空格)所以你可以嘗試類似 cd \?\?\?\?\?\?\ \?\?\?\? (如果你還沒嘗試過)
假設有人故意給文件起了那個棘手的名稱,而不是亂碼/損壞/非法編碼。
答案4
查看其中內容的簡單方法是使用 FileZilla 透過 FTP 傳輸到電腦。然後您可以使用 FileZilla 重新命名該目錄。