Basta encontrar todos os arquivos com um til, remover o til e procurar pelo "original":
find . -name '*~' -print0 | while IFS= read -r -d $'find . -name '*~' -print0 | while IFS= read -r -d $'%pre%' file; do
[ -e "${file%\~}" ] || echo cp "$file" "${file%\~}"; done
done
' file; do
[ -e "${file%\~}" ] || echo cp "$file" "${file%\~}"; done
done
Explicação:
-
find ~/ -name '*~' -print0
: encontre todos os arquivos em$HOME
que terminam em um til e imprima-os com o caractere nulo (
). O último é necessário para lidar com nomes de arquivos estranhos que contenham novas linhas, etc.while IFS= read -r -d $'
find
' file; -
IFS=
: leia cada arquivo encontrado por-r
em $ file '.-
-d $'
: turnos da divisão automática do bash no espaço em branco"${file%\~}"
' -
[ -e "${file%\~}" ] || echo 'cp '$file' '${file%\~}"
: trate as barras invertidas literalmente (não como caracteres de escape) -
echo
: define o delimitador de campo de entrada para o caractere nulo.
-
- %code% : remove o til, consulte aqui
- %code% : o eco será executado somente se o nome do arquivo (sans til) não existir. Para realmente copiar os arquivos, basta remover o %code% .