Para lidar com nomes de arquivos com espaços:
#!/bin/bash
OPWD=$(pwd)
cd "$1"
for MYFILE in "$2"/*
do
if [ -f "${MYFILE##/*/}" ]
then
echo "removing ${MYFILE##/*/}"
rm "${MYFILE##/*/}"
fi
done
cd "$OPWD"
Eu quero encontrar todos os arquivos em dir1 tendo os mesmos nomes de arquivo correspondentes em dir2 e excluí-los do diretório1.
Por exemplo:
dir1: first.txt second.txt
dir2: third.txt first.txt
Então, eu quero remover do arquivo dir1
first.txt
.
Como conseguir isso usando o terminal Bash? (não script com for
loops etc. ou programa de terceiros como "fdupes")
Outra rapidinha, também sem um loop explícito. Não se esqueça, você pode prefixar o rm -f
com echo
para testar isso.
( cd dir2 && find . -maxdepth 1 -type f -print0 ) | ( cd dir1 && xargs -0 rm -f )
Você pode colocar isso em um script, substituindo dir1
por "$1"
e dir2
por "$2"
Resposta rápida ...
#!/bin/bash
#finddel dir1 dir2
for i in $(ls $1)
do
[ -f $2/$i ] && echo "Deleting $2/$i" && rm -f $2/$i
done
Use 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
Tags bash files rm shell-script