【发布时间】:2012-10-06 11:54:52
【问题描述】:
[编辑] 问题已解决。脚本更新如下。感谢大家的帮助。我需要做一些修改才能使其全部使用文件夹名称和非空文件夹中的空格。
这个真的很难受。
下载文件时,我的系统会创建两件事:
-
一个文件(在我的“工作”目录中创建),例如
- Johns.Pizza.Place.5489231.job
- Marks.Hair.Salon.NY.888.job
- Rachels.Bike.and.Boat.Shop.11122287865.job
-
带有文件名的文件夹(在我的“Temp”目录中创建),例如
- Johns.Pizza.Place
- Marks.Hair.Salon.NY
- Rachels.Bike.and.Boat.Shop
如您所见,文件夹名称总是与文件名的一部分匹配,但每个文件总是附加一个随机长度的数字,然后是扩展名(即“.job”)。
我想要做的是能够运行一个脚本来尝试
匹配文件目录中的文件夹名称但仅进行部分匹配,因为文件同时添加了随机数和扩展名,然后
在未找到关联文件时删除这些文件夹(我在某些操作后使用 Hazel 删除文件)。如果找到一个文件夹的匹配文件,我不希望删除该文件夹。
这是我尝试过的,但我知道它不完整。显然,我试图仅在路径中提取文件夹名称以匹配已删除扩展名的部分文件名,但我不确定如何删除随机数字符串。
[编辑]:下面的最终工作脚本
#! /bin/sh
MainDir="/Users/Dhy/Desktop/Temp Files/1. All Files/"
JobDir="/Users/Dhy/Documents/All Jobs/"
find "$MainDir"* -maxdepth 0 -type d | while read FolderName; do
SuffixName=$(basename "${FolderName}");
preserve=''
for file in "$JobDir"*.job; do
if [[ $file\.[0-9]+ =~ $SuffixName ]]; then
preserve='on'
break
fi
done
if [ -z $preserve ]; then
rm -rf "$MainDir$SuffixName"
fi
done
非常感谢任何帮助。
【问题讨论】:
-
您应该使用
#!/bin/bash而不是#!/bin/sh,因为sh不支持[[ ]]。/bin/sh可能与/bin/bash相关联,但最好小心。
标签: bash shell compare pattern-matching