我不知道這些文件是如何產生的,但它看起來像這樣ls -lh
:
total 8.1G
-rw-r--r-- 1 root root 1.6G Apr 13 2022 test_some_data_S6_R2.fastq.gz?
-rw-r--r-- 1 root root 1.5G Apr 13 2022 test_some_data_S6_R1.fastq.gz
當我使用 ls 獲取要自動完成的文件名時,它看起來像這樣 -
ls /path/to/file/test_some_data_S6_R2.fastq.gz^M
^M
應該是 DOS 中的運營商返回,所以我最好的猜測是,有人可能從 Windows 系統複製了該名稱並使用它來命名該檔案。有很多方法可以替換^M
文件的內容,但就我而言,我想查找^M
名稱中包含的文件。
我嘗試過find /path/with/files/ -iname "^M"
,但沒有運氣。我試著用 逃脫\
,但仍然沒有骰子。我正在透過 SSH 連接到RHEL使用 MobaXTerm 的機器,所以我嘗試了 Windows 快捷鍵CTRL+ Q、CTRL+ M,但它隱藏了當前工作窗口,並且不插入^M
.
答案1
在 bash 中,您可以使用$'\r'
來插入^M
控製字元。
find /path/with/files -name '*'$'\r'
iname
不需要,因為 glob 表達式不包含任何字母- 必須包含星號以符合前面的名稱
^M
我甚至可以^M
透過組合直接進入 bash 命令行Ctrl + v Ctrl + m。實際的鍵可能取決於bind
及其分配quoted-insert
。
find /path/with/files -name '*^M'
答案2
這是該方法的一個小變化@choroba 在他們的回答中發布。
在文字編輯器中建立一個小腳本(這裡稱為 myscript),如下所示
#!/bin/bash
find . -name "*^M" -print0 | xargs -0 ls
這裡唯一的技巧是您需要按^M
字面插入字符,並且根據文字編輯器的不同,有一些特殊的技巧可以做到這一點。在 vi 或 vim 中它是ctrl- K。在 emacs 中是ctrl- Q。使用任何需要的東西。
然後使腳本可執行:
chmod 755 myscript
然後執行腳本./myscript
。它應該只列出以該字元結尾的檔案^M
。如果它執行了您想要的操作,請更改為xargs -0 ls
並xargs -0 rm -f
再次執行腳本以刪除文件