bash脚本删除与另一个目录中的文件匹配的文件

时间:2015-06-29 14:43:37

标签: bash shell rm

我试图创建一个从CVS中检索文件(包括子文件夹)并将它们存储到临时目录/ tmp / projectdir /(OK)中的脚本,然后从我的项目目录/ home中删除这些文件的副本/ projectdir /(不行),不触及项目目录中的任何其他文件或文件夹结构本身。

我一直尝试两种方法,但我遇到了两种问题。到目前为止,这是我的剧本:

#!/usr/bin/bash

cd /tmp/
echo "removing /tmp/projectdir/"
rm -rf /tmp/projectdir

# CVS login goes here, code redacted
# export files to /tmp/projectdir/dir_1/file_1 etc
cvs export -kv -r $1 projectdir

# method 1
for file in /tmp/projectdir/*
do
  # check for zero-length string
  if [-n "$file"]; then
    echo "removing $file"
    rm /home/projectdir/"$file"
  fi
done

# method 2
find /tmp/projectdir/ -exec rm -i /home/projectdir/{} \;

这两种方法都没有按预期工作,因为我需要某种方式从文件名中删除/ tmp / projectdir /(用/ home / projectdir /替换)并防止它们执行rm / home / projectdir / dir_1(即目录而不是特定文件),但我不知道如何实现这一目标。

(如果有人想知道,在我意识到/ tmp / projectdir /也是字符串的一部分之前,零长度字符串位是试图避免rm&#39目录)

1 个答案:

答案 0 :(得分:3)

您可以使用:

cd /tmp/projectdir/
find . -type f -exec rm -i /home/projectdir/{} \;