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

Zul*_*kis 16 linux bash

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

我需要两件事:

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

最好的方法是什么?

编辑,澄清:

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

aym*_*met 18

您可以使用以下命令:

cd new-files ; find . -exec rm -rf path/to/other-directory/{} \;
Run Code Online (Sandbox Code Playgroud)

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

但是你要小心,如果一个文件new-files擦除文件other-directory,你将无法使用这种方法恢复旧文件.您应该考虑使用版本控制系统(例如Git).

  • 好一个!我建议使用`-exec`和尾随的`+`not`;`.这更有效,因为`rm`调用次数少得多(类似于`xargs`). (2认同)

fed*_*qui 5

从你的:

编辑,以澄清:

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

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

for file in /new-files/*
do
   rm /other-directory/"$file"
done
Run Code Online (Sandbox Code Playgroud)