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