How to Clean Up macOS ._ Dot Underscore Files on Ubuntu/Linux Systems


6 views

When working in cross-platform environments between macOS and Linux, you'll often encounter mysterious ._filename files. These are resource fork files created by macOS to store additional file metadata (like custom icons or Finder info) when files are transferred to non-HFS filesystems.

The most efficient way to remove all these files in a directory is:

find . -type f -name "._*" -delete

This command:

  • Scans the current directory (.) recursively
  • Targets only files (-type f)
  • Matches the ._ prefix pattern (-name "._*")
  • Deletes them immediately (-delete)

For verification before deletion:

# First list all matching files
find . -type f -name "._*"

# Then delete after confirmation
find . -type f -name "._*" -exec rm -v {} \;

For files with spaces or special characters:

find . -type f -name "._*" -print0 | xargs -0 rm -f

When transferring files from macOS:

# Using rsync
rsync --exclude='._*' -avz source/ destination/

# Using tar on macOS before transfer
COPYFILE_DISABLE=1 tar -cf archive.tar files/

For regular maintenance, create a cleanup script:

#!/bin/bash
TARGET_DIR=${1:-.}
echo "Cleaning ._ files in $TARGET_DIR"
find "$TARGET_DIR" -type f -name "._*" -delete
echo "Cleanup complete"

The simple rm ._* approach has limitations:

  • Only works in current directory
  • Fails if no matches exist
  • Doesn't handle subdirectories
  • May miss hidden ._ files

The find solution addresses all these issues.


Those pesky ._filename files you're seeing are resource forks created by macOS. When you transfer files between macOS and Linux systems, these hidden metadata files often tag along. They typically start with ._ followed by the original filename.

Here's the most efficient way to remove all ._ files in the current directory:

find . -type f -name "._*" -exec rm -f {} \;

Breaking down what this does:

  • find . - searches in current directory and subdirectories
  • -type f - only targets regular files
  • -name "._*" - matches files starting with ._
  • -exec rm -f {} \; - force removes each matching file

If you want to preview files before deleting:

find . -type f -name "._*" -ls

For a more interactive approach (prompts before each deletion):

find . -type f -name "._*" -exec rm -i {} \;

If you frequently exchange files with macOS users, consider mounting shares with the nounix option or using dot_clean on the macOS side before transferring files.

This command removes both ._ files and .DS_Store files (another macOS artifact):

find . $-name "._*" -o -name ".DS_Store"$ -exec rm -f {} \;

For a more thorough cleanup script you could save as clean_macos_artifacts.sh:

#!/bin/bash
echo "Cleaning macOS artifacts..."
find "$1" -type f $-name "._*" -o -name ".DS_Store"$ -exec rm -f {} \;
echo "Directory $1 cleaned!"