AJM*_*eld 2 grep bash backup file-search
我不小心删除了主目录中的一些文件,但我不知道到底删除了哪些文件。如何获取所有缺少相应文件的备份文件的列表?(相当于,名称以波浪号结尾的文件,而同一目录中没有另一个具有相同名称且没有尾随波浪号的文件?)
到目前为止我尝试了一些事情;虽然我不记得确切的标志,但它是这样的:
grep -Rlv '(.*)\n\\1~|.*(?!~)'
Run Code Online (Sandbox Code Playgroud)
那没有用,也没有:
ls -R | grep -v '(.*)\n\\1~|.*(?!~)'
Run Code Online (Sandbox Code Playgroud)
我怎样才能找到这些文件?
只需找到所有带有波浪号的文件,删除波浪号并查找“原始”:
find . -name '*~' -print0 | while IFS= read -r -d '' file; do
[ -e "${file%\~}" ] || echo cp "$file" "${file%\~}"; done
done
Run Code Online (Sandbox Code Playgroud)
解释:
find ~/ -name '*~' -print0$HOME:以波浪号查找该末尾的所有文件,并使用 null ( \0) 字符打印它们。最后一个对于处理包含换行符等的奇怪文件名是必要的。
while IFS= read -r -d '' file;:将找到的每个文件读find入 $file`。
IFS=: bash 在空白处自动分割的轮次-r:按字面意思对待反斜杠(不作为转义字符)-d '':将输入字段分隔符设置为空字符。"${file%\~}": 删除波形符,请参阅此处[ -e "${file%\~}" ] || echo cp "$file" "${file%\~}":仅当文件名(无波浪号)不存在时才会运行 echo。要实际复制文件,只需删除echo.| 归档时间: |
|
| 查看次数: |
825 次 |
| 最近记录: |