问题描述
多级文件夹下,有多个同名文件,以及其他无关文件,为了减轻体量,遍历目录,只保留对应文件
首先open terminal here
find . -type f \( ! -name 'algo_raw_imu.bin' -a ! -name 'post_gnss_only_error.log' -a ! -name 'rtkout.log' \) -exec rm {} +
这个命令使用 find 来遍历当前目录及其子目录中的所有文件。
-type f 限制查找到的对象为文件。
! -name 表示排除指定名称的文件。在这种情况下,我们删除了除了 ‘algo_imu.bin’、‘post_gnss_only_error.log’ 和 ‘rtkout.log’ 的所有文件。
-exec rm {} + 部分将找到的文件传递给 rm 命令来进行删除操作。{} 代表找到的文件,+ 表示一次性传递多个文件给 rm 命令,以提高效率。
请确保在执行这些操作之前备份您认为重要的文件,以防意外情况发生。
问题描述
多级文件夹下,只保留post_gnss_only_error.log rtkout.log 两个文件,如果有algo_raw_imu.bin,则将该文件删除,并新建一个空的algo_raw_imu.bin,其余文件删除
建立一个.sh文件
#!/bin/bash
# 设置要操作的目录路径
target_dir="/path/to/your/target/directory"
# 遍历目标目录及其子目录
find "$target_dir" -type d | while read dir; do
# 进入当前目录
cd "$dir" || continue
echo "$dir"
# 保留的文件
keep_files=("post_gnss_only_error.log" "rtkout.log")
# 遍历当前目录下的文件
for file in *; do
if [[ -f "$file" ]]; then # 判断是文件而不是目录,防止尝试删除目录
if [[ "${keep_files[*]}" =~ "$file" ]]; then
continue # 保留文件,跳过操作
elif [[ "$file" == "algo_raw_imu.bin" ]]; then
rm "$file" # 删除algo_raw_imu.bin
touch "$file" # 创建空的algo_raw_imu.bin
else
rm "$file" # 删除其他文件
fi
fi
done
done
- #!/bin/bash 是一个称为Shebang的特殊注释行,它告诉操作系统使用哪个解释器来执行脚本。在这种情况下,/bin/bash 是Bash Shell的路径,这是一种常见的命令行Shell解释器。
- find [path] [expression]:-type:按照文件类型查找,d为目录
- while read dir:同时记录目录的路径
问题描述
压缩文件,常规需求
zip -r [压缩后的文件名.zip] [./文件名]