刪除Linux中除1個檔案和1個目錄之外的所有內容

刪除Linux中除1個檔案和1個目錄之外的所有內容

我想從我目前所在的目錄中刪除除 1 個檔案和 1 個目錄之外的所有內容。

我有一個目錄,其中包含三個目錄 a、b、c 和三個檔案 1.php、2.php、3.php。我只想刪除目錄 a 和 b,以及檔案 1.php 和 2.php。我正在尋找一種解決方案,以更簡單的方式做到這一點。我正在尋找一種可以在更大範圍內使用更多資料夾和文件的解決方案。

答案1

find directory -not \( -name temp -o -name 3.php -o -name c -prune \) -delete

一個快速測試案例表明它至少適用於這個確切的案例。如果有名為例如c或類似名稱的子目錄,我相信您也可能排除它們。在一般情況下讓它工作很容易,但要定義所有一般性的 find 命令需要一些測試。

不要使用“-delete”語句進行測試以查看它符合哪些檔案。

PRESSTOP:指定find時變更其行為(對此發出警告且指定時不會繼續)。不過,您始終可以將輸出透過管道傳輸到and ,或寫入而不是。-deletefind-prunexargsrm-execdir rm {} \;-delete

例子:

find directory -not \( -name directory -o -name 3.php -o -name c -prune \) -execdir rm -r {} \;
find directory -not \( -name directory -o -name 3.php -o -name c -prune \) -print0 | xargs -0 rm -r

這始終是一件棘手的事情,當目標是刪除檔案時,請製作大量的測試案例。我有很多類似的find東西每晚運行,我不能說我不緊張讓它們自由:-)

答案2

我的直覺是這樣的 - 如果您只有一個文件和一個目錄要保存,請將它們複製到安全的地方,然後清除其餘的。

cp /dir/file.txt /safe/dir/
cp -R /dir/to/save /safe/dir/
rm -rf /dir/

答案3

在偽 perl 中嘗試以下腳本:

#request the file you don't want to delete and store the name in a scalar variable.

opendir(DIRHANDLE, ".") || die "Could not open Directory handle.";
@list = readdir(DIRHANDLE);

foreach $name (@list) {
if($name != $your_input_variable) {
unlink($name);
} else {
}
}

相關內容