linux bash - 从另一个目录中删除一个目录中的所有文件

时间:2013-05-27 12:41:27

标签: linux bash

我想使用bash命令从linux中的另一个文件夹中删除文件夹new-files中存在的所有文件。

我需要两件事:

  • 我有一些设置脚本可以复制一些预配置的配置文件。我想选择再次删除这些文件
  • 有时会发生归档文件被解压缩到下载目录的根目录而不是解压缩到子目录,因为打包文件的人将所有内容都放到了归档根目录

最好的方法是什么?

编辑,澄清:

  1. 我找到了一个名为new-files
  2. 的文件夹
  3. 现在我执行cp -r new-files/* other-directory/
  4. 让我们说其他目录不是我想复制它们的目录,但它已经包含其他文件所以我不能只做rm other-directory /*.
  5. 我需要删除我意外复制的所有文件夹。我该怎么做?

3 个答案:

答案 0 :(得分:17)

您可以使用以下命令:

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

它将列出从new-files目录(new-files目录中复制的所有文件都不会被考虑在内。对于每个文件,它将删除other-directory中的复制版本。

但是要小心,如果new-files中的文件删除other-directory中的文件,您将无法使用此方法恢复旧文件。您应该考虑使用版本控制系统(例如Git)。

答案 1 :(得分:5)

来自你的:

  

编辑,澄清:

     
      
  1. 我找到了一个名为new-files
  2. 的文件夹   
  3. 现在我执行cp -r new-files/* other-directory/
  4.   
  5. 让我们说其他目录不是我想要复制它们的目录,但它已经包含其他文件所以我不能只做rm   其他目录/*.
  6.   
  7. 我需要删除我意外复制的所有文件夹。我该怎么做?
  8.   

您可以遍历原始目录new-files/并删除other-directory/中具有相同名称的文件:

for file in /new-files/*
do
   rm /other-directory/"$file"
done

答案 2 :(得分:2)

小脚做你想做的事:

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

echo $x | xargs rm