Bash技巧:保留原文件并删除pkgs目录及复制的内容
Bash实现保留原始文件并删除pkgs目录及复制内容的方法
正确实现步骤
1. 记录原始文件列表
先把当前目录下除了pkgs之外的所有文件/目录(包括隐藏文件)记录到临时文件,避免因文件名含空格、特殊字符导致的错误:
# 创建临时文件存储原始条目 original_list=$(mktemp) # 列出并排序当前目录条目,排除pkgs后写入临时文件 ls -A1 | grep -v '^pkgs$' | sort > "$original_list"
2. 复制pkgs内容并完成操作
将pkgs内的内容递归复制到当前目录,执行你的业务操作:
# 递归复制pkgs下所有内容到当前目录 cp -r pkgs/* . # 在这里执行你需要完成的相关操作...
3. 删除pkgs目录
复制完成后直接删除pkgs目录:
rm -rf pkgs
4. 删除从pkgs复制过来的新增内容
对比当前目录条目和原始列表,删除所有新增的、不属于原始目录的内容:
# 创建临时文件存储当前目录条目 current_list=$(mktemp) ls -A1 | sort > "$current_list" # 找出当前目录中不在原始列表的条目,逐一删除 comm -13 "$original_list" "$current_list" | while IFS= read -r item; do rm -rf "$item" done # 清理临时文件 rm "$original_list" "$current_list"
关键说明
- 使用
mktemp创建临时文件,避免文件名冲突,比直接用变量存储更安全(能处理含空格、换行的文件名)。 ls -A1会列出所有条目(除了.和..),包含隐藏文件;配合sort确保comm命令能正确对比两个列表。comm -13仅输出当前列表独有的条目,也就是从pkgs复制过来的新增内容,不会误删原始文件。
内容的提问来源于stack exchange,提问作者monte
相关产品推荐
相关产品推荐

