I do and get a list of files where I would like to delete many duplicate backup files
find . -type f -name '._*'
I would like to find those files which have a corresponding filename
/home/masi/._test.texmatches/home/masi/test.tex/home/masi/math/lorem.pngmatches/home/masi/math/._lorem.png
Pseudocode about files wanted to be saved filename which has corresponding ._filename but also save filename without ._filename
find . -type f -name '._*' -exec \
find filenameWithoutDotUnderscore, if yes, print the filename
Pseudocode 2 clarification about files wanted to be removed = ._filename if there is a corresponding filename
- If there is
filenameand._filenamein the same directory, print._filenamesuch that I can remove the duplicate =._filename. - Exclude
filenamePart1_.filenamePart2,bok_3A.pdf, ... in._filename. - Do not remove
._filenameif there is no correspondingfilenamein the same directory.
Reviewing Wildcard's command
I do find . -type f -name '._*' -exec sh -c 'for a; do f="${a%/*}/${a##*/._}"; [ -e "$f" ] && printf "rm -- %s\n" "$a"; done' find-sh {} + but it returns too many files. I think I need more && conditions beside the existence check ([ -e "$f" ]). It would be great to get here some content comparison and lastly diff if suspicion of much difference.
Systems: Ubuntu 16.04 and Debian 8.25
Bash: 4.3.42
Find: 4.7.0