在終端機中列出不含副檔名的檔案名稱?

在終端機中列出不含副檔名的檔案名稱?

我正在使用 Mac。我需要獲取資料夾中的文件列表,但其副檔名不包含在列表中。這是因為我需要一個用於網站導入的產品列表,為了方便起見,圖像名稱與產品名稱相同。但是,我的清單不需要有擴展名。

我透過使用終端機獲得了檔案名稱列表,並能夠將它們複製到文字檔案中。唯一的問題是文件名包含擴展名“.jpg”使用我從終端獲得的列表,我現在必須瀏覽我的文本文件並手動刪除每個文件名中的擴展名(有一千多個)並且這將需要很長時間。有更容易的方法嗎?我可以讓終端顯示不含擴展名的文件名列表,以便我可以將其複製並貼上到列表中嗎?或者我可以從這些檔案中刪除擴展名,然後在終端中列出它們並複製它們的名稱嗎?還有別的辦法嗎?這裡很困惑。我不是程式設計師,只是網站設計。

希望有人能幫忙解決這個問題。感謝大家!

答案1

借自堆疊溢位:

ls -1 | sed -e 's/\..*$//'

我嘗試將其標記為重複,但沒有成功。

鑑於我們知道文件擴展名,我自己的解決方案之一。

find -type f -exec basename -s '.jpg' "{}" \;

因此,找到所有文件而不是目錄 - type f,然後basename對每個文件執行。允許-s您指定要刪除的已知後綴。

另一個替代解決方案:來自蘇

答案2

如果「in.txt」檔案中有檔案列表,請執行此腳本以取得「out.txt」中不含副檔名的檔案列表:

#!/bin/bash    
while read fullfile; do
    filename=$(basename "$fullfile")
    filename="${filename%.*}"
    echo $filename >> out.txt
done <in.txt

答案3

你用vi(或vim)嗎?如果您這樣做,那麼,由於您已經在文字檔案中獲得了 JPEG 檔案名,最簡單的方法可能是使用vi/編輯該檔案vim並輸入

:%s/\.jpg$//

這表示,在文件中的每一行中,尋找.jpg出現在行尾的內容,將其刪除,然後將其替換為空白。如果有些行不以 結尾.jpg,那也沒關係;它們將被忽略(跳過)。若每行有多個產品名稱(檔案名稱),如下所示

        hammer.jpg              screwdriver.jpg         wrench.jpg

只需省略$並添加g並說

:%s/\.jpg//g

這將刪除全部的出現.jpg,即使它們不在行尾。

相關內容