我想找到dir1中与dir2中具有相同文件名的所有文件,并将它们从dir1中删除。
例如:
dir1: first.txt second.txt
dir2: third.txt first.txt
所以我想从dir1
first.txt
文件中删除。
如何使用 Bash 终端实现这一点? (不是带有for
循环等的脚本或像“fdupes”这样的第 3 方程序)
答案1
处理带空格的文件名:
#!/bin/bash
OPWD=$(pwd)
cd "$1"
for MYFILE in "$2"/*
do
if [ -f "${MYFILE##/*/}" ]
then
echo "removing ${MYFILE##/*/}"
rm "${MYFILE##/*/}"
fi
done
cd "$OPWD"
答案2
另一个快速方法,也没有显式循环。不要忘记,您可以在前面加上rm -f
withecho
来测试这一点。
( cd dir2 && find . -maxdepth 1 -type f -print0 ) | ( cd dir1 && xargs -0 rm -f )
您可以将其放入脚本中,替换dir1
为"$1"
和dir2
"$2"
答案3
快速回答...
#!/bin/bash
#finddel dir1 dir2
for i in $(ls $1)
do
[ -f $2/$i ] && echo "Deleting $2/$i" && rm -f $2/$i
done
答案4
使用rsync
:
rsync --verbose --remove-source-files xyz/* .
pop3-2.dump
pop3-3.dump
pop3.dump
popcorn-build.log
sent 852,069,995 bytes received 124 bytes 113,609,349.20 bytes/sec
total size is 851,861,745 speedup is 1.00