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$HOMEque 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-rem $ 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% .