Import Old Personal Dictionaries into Aspell Safely
aspell-import pulls your old Ispell and Aspell personal word lists into the format GNU Aspell actually uses. It takes zero command-line options and shows no confirmation prompt. This guide gets those old dictionaries imported and leaves you a record of exactly what changed. It uses aspell-import from Aspell 0.60.8.1, installed here as Debian package aspell 0.60.8.1-1build1.
The route
Jump straight to the step you need, or tick off Done means at the end.
Allow about fifteen minutes. You need a shell, the aspell package and a backup of the home directory holding the old dictionary files. The command changes files in that home directory, so keep a copy before you start. It does not need root privileges when you are importing your own files.
1. Check the command and its contract
Confirm which executable will run and record the installed package version:
$ command -v aspell-import
/usr/bin/aspell-import
$ dpkg-query -W -f='${Package} ${Version}\n' aspell
aspell 0.60.8.1-1build1
The installed manpage gives aspell-import no command-line options at all. Run it on its own; do not append a guessed language or directory flag. The utility discovers files in the home directory named by HOME.
Checkpoint
If command -v finds nothing, install the package through your normal system package process and repeat this check. Do not run a similarly named script copied from an untrusted directory.
2. Identify the files it can discover
Before importing, look at what the home directory actually holds. The command searches for two groups of names:
.ispell_*: the older Ispell personal dictionaries..aspell.*.*: Aspell personal files ending in.pwsor.per, and replacement files ending in.prepl.
Use a shell glob check without opening or changing anything:
printf '%s\n' "$HOME"
for file in "$HOME"/.ispell_* "$HOME"/.aspell.*.*; do
[ -e "$file" ] && printf '%s\n' "$file"
done
A missing match is not an error: the shell leaves an unmatched glob unchanged, which is exactly why the [ -e ] test is there. Treat the printed list as your import set, and stop to inspect anything you did not expect to see.
3. Make a recoverable backup
Copy the discovered files somewhere you can restore from. A simple example creates a dated directory under a separate backup location:
backup_dir="$HOME/aspell-import-backup-2026-09-22"
mkdir -- "$backup_dir"
cp -- "$HOME"/.ispell_* "$HOME"/.aspell.*.* "$backup_dir"/
Every glob in that command must match at least one file. If your inspection only found one family, copy that family instead, for example cp -- "$HOME"/.ispell_american "$backup_dir"/ when that is the only match. Keep the backup until you have checked the imported dictionary.
Safety boundary
aspell-import overwrites or regenerates personal files through Aspell. If the result is wrong, stop using the generated files, move them aside, and restore the originals from backup_dir. Never restore over a file while an Aspell process is writing it.
4. Run the import
Run the command from an ordinary shell:
$ aspell-import
Processing "~/.ispell_american", lang = en
Merging en
@(#) International Ispell Version 3.1.20 (but really Aspell 0.60.8.1)
Your own output depends on which files and languages it finds. Expect one Processing line per recognised dictionary, then a Merging line per language it can merge. The language name is inferred from the filename and mapped to an Aspell language code, and there is no interactive confirmation prompt to catch a mistake.
Watch that language mapping closely: a filename with an unrecognised language name is skipped with a warning, except for a two-letter name the script treats as already abbreviated. A clean skip does not prove the dictionary contents are correct, so check the output before moving on.
5. Verify the generated personal files
Record the command's status immediately:
$ printf 'exit status: %s\n' "$?"
exit status: 0
Status 0 means the processing loop completed, not that a certain number of words were imported. List the files again and compare them with the backup:
find "$HOME" -maxdepth 1 -type f \
\( -name '.ispell_*' -o -name '.aspell.*.*' \) -printf '%f\n' | sort
diff -u "$backup_dir/.aspell.en.pws" "$HOME/.aspell.en.pws"
Swap in a file that actually exists on your machine for that example .aspell.en.pws path. A difference is expected once old data has been merged in, but an unchanged source file is also possible: the utility reads old files and hands their entries to Aspell, while Aspell itself manages the resulting personal and replacement files.
For a content check, ask Aspell about a word you deliberately imported:
$ printf '%s\n' 'legacyword' | aspell --lang=en list
legacyword
Use a real word from your dictionary and the matching language code. If it is not printed back, that invocation did not accept it as an unrecognised word. Check the language, the source format and the generated file before retrying.
6. Recover from a bad import
Do not rerun the command repeatedly while guessing. Preserve the current generated files in a separate directory first, then restore the originals from the backup:
failed_dir="$HOME/aspell-import-after-failure-2026-09-22"
mkdir -- "$failed_dir"
cp -- "$HOME"/.aspell.*.* "$failed_dir"/ 2>/dev/null || true
cp -- "$backup_dir"/.ispell_* "$HOME"/ 2>/dev/null || true
cp -- "$backup_dir"/.aspell.*.* "$HOME"/ 2>/dev/null || true
Review the copied files before deleting anything. The trailing true only tolerates a backup that contains one file family rather than both; it does not hide failures from the earlier inspection or import command. If the backup is incomplete, stop and recover it from your separate backup system rather than reconstructing dictionary data by hand.
Done means
aspell-importran from the intended Aspell installation and returned status 0.- Every processed filename and language appeared in output as expected.
- The generated personal or replacement files were compared with the backup.
- A known imported word was checked with the matching Aspell language.
- The original files and the post-import files are both recoverable.