【发布时间】:2016-03-17 18:19:57
【问题描述】:
我想打印所有子目录中的文件名(我已经有了),但是取决于子目录我想在名称后添加一个特定的后缀。
对于子目录 gas_station 我要添加后缀 50,对于子目录 golf_course 我要添加后缀 51。
这是我所拥有的,但它并不完全有效:
#!/bin/bash
#lists the subdirectories, these are 'gas_station' and 'golf_course'
for i in $(ls -d */); do
if ${i%%/} = 'gas_station'
then
find /home/apples/dataset/small_train_B/g/${i%%/}/* -type f -printf "g/"${i%%/}"/""%f 50\n"
else
find /home/apples/dataset/small_train_B/g/${i%%/}/* -type f -printf "g/"${i%%/}"/""%f 51\n"
fi
done
它打印出以下内容:
...
g/gas_station/00000997.jpg 51
g/gas_station/00000998.jpg 51
g/golf_course/00000017.jpg 51
...
但是,我需要这个:
...
g/gas_station/00000997.jpg 50
g/gas_station/00000998.jpg 50
g/golf_course/00000017.jpg 51
...
【问题讨论】:
-
如果特殊情况的数量很少(在您的情况下为 1),那么只运行 2 个不同的查找(一个生成 50 个后缀,一个生成 51 个后缀)不是更简单吗?
-
您的结果清楚地表明比较失败。那时 ${%%/} 的价值是多少?
-
问题是你没有使用
test命令(又名[)来测试相等性。但这是一种不必要的拜占庭方法。 -
@rpy 感谢您的建议!但是似乎已经给出了解决方案:)
标签: bash if-statement for-loop subdirectory