2013-03-07 65 views
1

我試圖刪除目錄中的文件。其中一些文件的名稱附有雙引號,而其他文件則沒有。這些文件中的一個例子是:
"DDD344".csv
D2DW.csv
這兩個文件都位於子目錄的目錄YM內。用名稱中的雙引號刪除文件

find這樣的文件並刪除它們。我祈求find像這樣:
find YM -name "*.csv" -print | xargs rm

上面的命令導致了很多No such file or directory錯誤。
我試圖以下列方式使用sed

find yum/yum_hyd -name "\"*\".csv" | sed 's/"/\"/g' | xargs rm
但無濟於事。我如何刪除文件?

回答

2

試試這個:

find yum/yum_hyd -name "\"*\".csv" |sed 's/"/\\"/g'|xargs rm 

解釋:

你想 \"更換 "

。但如果你直接寫\",sed認爲它是普通的",你必須避開反斜線。所以\\"的作品。

+0

在sed表達式中雙'\\'的解釋很好。 – Sriram 2013-03-07 21:33:53

+0

在你的例子中,sed命令基本上取代了「with a」 在這個例子中,sed操作正在替換「with a」 – Necrolyte2 2013-03-07 21:38:18

+0

@Sriram exp添加 – Kent 2013-03-07 21:38:41

2

我不知道這個選項直到最近,但你可以列出該文件的通過以下方式索引節點:

$ LS -il

在輸出,你會看到第一列包含inode值。然後,您可以將該值用於find -inum違規文件並將其刪除。 輸出

2616366 -rw-R - R-- 1等等等等

$ find . -inum 2616366 -exec rm -f {} \; 

這將刪除該文件與該特定INUM。

作爲測試,您可以運行以下命令來查找您的文件。

ls -il \"* | awk '{print $1}' | xargs -n1 -I {} find -inum {} 

替換此命令的最後部分的「RM」命令(「查找-inum {}」),一旦你滿意。

這也是類似的問題上SuperUser

4

的問題是,你使用xargsxargs是一個可怕的破壞程序,除非與非標準-0選項一起使用,否則不應該用於任何其他程序。即便如此,在這種情況下,我想不出有什麼好處。你應該直接從find中執行rm。

find . -type f -name '"*".csv' -exec rm -f -- {} + 

會工作。如果你有GNU find,你也可以使用-delete