在bash中从一个文件中读取文件名称,并检查当前目录是否保护这些文件

Posted 知柏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在bash中从一个文件中读取文件名称,并检查当前目录是否保护这些文件相关的知识,希望对你有一定的参考价值。

目的:在bash中从一个文件中读取文件名称,并检查当前目录下的所有文件,若不存在则返回提示
实现:check_file.sh

#!/bin/bash

# 获取当前路径
CRTDIR=$(pwd)

i=0
# 从保存了文件名称的txt文件中获取文件名,并生成数组
for line in $(cat filelist.txt)
do
  file_list[$i]=${line%%[[:cntrl:]]}
  ((i++))
done

# 检查数组中的文件是否存在于当前目录及所有的子目录下
for FILE in "${file_list[@]}"
do
  file_count=$(find $CRTDIR -name $FILE | wc -l)
  if [[ $file_count -eq 0 ]]
  then
    echo "Warning: $FILE not found in $CRTDIR!"
  fi
done

使用:

  • 将check_file.sh与filelist.txt两个文件放到需要检查的目录下
  • Windows系统下,可以用Git Bash,先转到该目录
  • 输入./check_file.sh, 运行脚本

例子:

# file.txt
1.pdf
2.cad
3.txt
4.exe
// 目录结构
BashTest
├─ 1
│  └─ 3.txt
├─ check_file.sh
└─ filelist.txt
$ ./check_file.sh
Warning: 1.pdf not found in /g/BashTest!
Warning: 2.cad not found in /g/BashTest!
Warning: 4.exe not found in /g/BashTest!
人能常清静,天地悉皆归

以上是关于在bash中从一个文件中读取文件名称,并检查当前目录是否保护这些文件的主要内容,如果未能解决你的问题,请参考以下文章

需要 bash shell 脚本来从文件中读取名称值对

Bash - 从与脚本文件位于同一目录中的文件读取

在一段时间读取循环bash中从第4行获取变量

检查文件名包含bash脚本中的字符串

如何在streamlit中从用户读取csv文件并转换为pandas数据框

在 Bash 中从文本文件创建数组