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

bash script to remove files matching those in another directory

我正在尝试创建一个脚本,用于从 CVS 检索文件(包括子文件夹)并将它们存储到临时目录 /tmp/projectdir/(确定),然后从我的项目目录中删除这些文件的副本 /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  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 (即目录而不是特定文件),但我不确定如何实现这一点。

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

您可以使用:

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