dir2와 동일한 파일 이름을 가진 dir1의 모든 파일을 찾아 dir1에서 삭제하고 싶습니다.
예를 들어:
dir1: first.txt second.txt
dir2: third.txt first.txt
dir1
first.txt
그래서 파일에서 제거 하고 싶습니다 .
Bash 터미널을 사용하여 이를 어떻게 달성할 수 있나요? ( for
루프 등이 있는 스크립트 또는 "fdupes"와 같은 타사 프로그램이 아님)
답변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
앞에 붙여서 echo
테스트 할 수 있다는 것을 잊지 마세요.
( 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