---
title: "Copiar sin sobreescrbir"
date: 2026-01-21T16:55:43-03:00
---
## Compare duplicate filenames across directories.

**Score: 96**

You can do this safely from Bash without overwriting anything. Here are the **cleanest and most reliable ways** on Arch Linux.

---

## 1️⃣ Just check if filenames collide (no paths)

This tells you **which filenames exist in both directories**, regardless of subdirectories.

```bash
comm -12 \
  <(find dir1 -type f -printf '%f\n' | sort) \
  <(find dir2 -type f -printf '%f\n' | sort)
```

🔹 Output = filenames that appear in **both** directories
🔹 Safe, read-only
🔹 Ignores file content (only names)

---

## 2️⃣ Show full paths of duplicates (more useful)

If you want to see **where** the duplicates are:

```bash
for f in $(comm -12 \
  <(find dir1 -type f -printf '%f\n' | sort) \
  <(find dir2 -type f -printf '%f\n' | sort)); do
    echo "---- $f ----"
    find dir1 dir2 -type f -name "$f"
done
```

This helps you decide what to rename or move.

---

## 3️⃣ Fast method (top-level only, no recursion)

If both directories **don’t have subdirectories**:

```bash
ls dir1 | sort > /tmp/d1
ls dir2 | sort > /tmp/d2
comm -12 /tmp/d1 /tmp/d2
```

---

## 4️⃣ Prevent overwriting when copying (recommended)

If your goal is copying files **without overwriting**, use:

```bash
cp -vn dir1/* dir2/
```

Flags:

* `-v` → verbose
* `-n` → **no clobber** (won’t overwrite existing files)

---

## 5️⃣ (Optional) Compare by filename + size (extra safety)

Helps detect same-name but different files:

```bash
find dir1 -type f -printf '%f %s\n' | sort > /tmp/a
find dir2 -type f -printf '%f %s\n' | sort > /tmp/b
comm -12 /tmp/a /tmp/b
```

---

### 🔥 Recommendation

If you just want to **avoid overwriting**, use **method 4**.
If you want to **audit before doing anything**, use **method 2**.

If you want:

* same filename **and same content (hash)**
* interactive renaming
* automatic conflict resolution

tell me 👍

