2013-05-27 72 views
9

我想使用bash命令從Linux中的另一個文件夾中刪除文件夾new-files中存在的所有文件。linux bash - 從另一個目錄中刪除所有位於一個目錄中的文件

我需要這個了兩件事情:

  • 我得到了它複製一些預配置的配置文件,對一些安裝腳本。我想有去除再次
  • 有時候碰巧檔案得到解壓到您的下載目錄的根目錄的文件,而不是到一個子目錄,因爲打包文件的人把一切檔案根
選項

這樣做的最佳方式是什麼?

編輯,以澄清:

  1. 我得到了一個名爲new-files文件的文件夾。
  2. 現在我執行cp -r new-files/* other-directory/
  3. 可以說其他目錄不是我想複製它們的目錄,但它已經包含其他文件,所以我不能只做rm other-directory/*。
  4. 我需要刪除我意外複製的所有文件夾。我怎麼做?

回答

13

你可以使用下面的命令:

cd new-files ; find . -exec rm -rf path/to/other-directory/{} \; 

它會列出在從new-files目錄複製所有文件(new-files目錄不會被考慮在內)。對於每個文件,它將刪除other-directory中的複製版本。

但是您必須小心,如果new-files中的某個文件在other-directory中刪除文件,您將無法使用此方法恢復舊文件。您應該考慮使用版本控制系統(例如Git)。

+2

好的!我建議使用'-exec',而後面的'+'而不是';'。這更加有效,因爲'rm'調用次數少得多(類似於'xargs')。 – TrueY

+0

@TrueY你不能那樣做。如果使用'+','find'會拋出一個錯誤,而'{}'前綴爲非空格字符。 – aymericbeaumet

+0

你想用這個正則表達式實現什麼?它似乎摧毀了我的命令,因爲它過濾掉了'conf.d'導演等等? – Zulakis

2

凌晨腳本,做你想要什麼:

pushd `pwd` 
cd /path/to/new-files 
x=`find . -type f` 
popd 

echo $x | xargs rm 
+0

我的意思是這樣的:檢查哪些文件都包含在'新files'和從其他目錄中刪除這些(如果它們存在) – Zulakis

+0

對不起,如果它不清楚,英語不是我的母語 – Zulakis

+0

我在我的第一篇文章中增加了另一個例子,也許這有助於 – Zulakis

4

從你:

編輯,以澄清:

  1. 我得到了一個名爲new-files文件的文件夾。
  2. 現在我執行cp -r new-files/* other-directory/
  3. 可以說其他目錄不是我想要複製它們的目錄,但它已經包含其他文件,所以我不能只做其他目錄/ * .rm other-directory/*。
  4. 我需要刪除我意外複製的所有文件夾。我怎麼做?

可以遍歷原來的目錄new-files/,並刪除與同名的文件在other-directory/

for file in /new-files/* 
do 
    rm /other-directory/"$file" 
done 
相關問題