Bash脚本:如何获得一个脚本来检查不同格式的重复文件名



所以我有一个转换程序(通过命令行工作),它可以获取数据文件并将其转换为新格式,同时还可以将其放在一个包含多个子文件夹的文件夹中。我想创建一个脚本,在执行这个转换程序之前检查重复项。

到目前为止,我有

#!/bin/bash
for subj in `ls <directory to data files>`
do
        subj_name=$subj
        subj_path=<directory to data files>/$subj_name #I need this for my program, can ignore

        cd <directory with output folders>
        if [ -e “$subj” ]; then
             echo “This file already exists” #This will restart the loop and move to the next file
        else
             echo “This folder does not exist”
             My_Program #I can handle this one
        fi
done

该程序可以很好地处理相同格式的文件(即.txt和.txt),但无法检查文件夹和相同名称的.txt。无论文件格式如何,我都可以对相同的名称进行更改吗?

编辑:我做了一些实验,我把一个重复的数据文件放进了输出文件夹的目录中,但它仍然无法识别。我认为cd行或if行是错误的。。有人告诉我怎么解决这个问题吗?

使用以下语法从$subj的值末尾删除".txt",返回结果字符串。(更多关于"Bash String Manipulation"的信息)

${subj%.txt}

然后检查是否存在带有或不带有.txt:的文件/目录

if [ -e "$subj" ] || [ -e "${subj%.txt}" ]; then
....

如果要删除任何后缀(.txt、.tgz、…),请使用${subj%.*}删除最后一个"之后(包括)的所有字符示例:

[bash]$ subj=file.txt
[bash]$ echo ${subj%.*}
[bash]$ file

或者使用${subj%%.*}删除第一个"."之后(包括)的所有字符:

[bash]$ subj=file.txt.tgz
[bash]$ echo ${subj%%.*}
[bash]$ file

相关内容

  • 没有找到相关文章

最新更新