有些文件有“?”在文件名的末尾,我需要找到這樣的文件

有些文件有“?”在文件名的末尾,我需要找到這樣的文件

我不知道這些文件是如何產生的,但它看起來像這樣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+ QCTRL+ 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 lsxargs -0 rm -f再次執行腳本以刪除文件

相關內容