使用shell脚本从文件名中删除所有元音

时间:2013-12-02 22:17:17

标签: file shell rename

当前代码:

find . -depth | \
while read LONG; do
    SHORT=$( basename "$LONG" | tr '[aeiou]' '[ ]' )
    DIR=$( dirname "$LONG" )
    if [ "${LONG}" != "${DIR}/${SHORT}" ]; then
            mv "${LONG}" "${DIR}/${SHORT}"
    fi
done

所以如果我有像aaa abc bdf这样的文件,我会得到文件'''bc''bdf'

我想要这个工作的方式是返回'aaa''bc'bdf'。 (完全删除第二个文件中的a,如果所有字符(文件扩展名除外)都是元音,请忽略它。

2 个答案:

答案 0 :(得分:0)

我认为您解决方案的两个问题是:

  • 你用元音代替空间。你不应该用空字符串替换吗?
  • 然后你需要测试SHORT是否为空。如果是,则丢弃它,可能通过分配SHORT = LONG。

答案 1 :(得分:0)

删除所有元音:

tr -d aeiou

如果basename(不包括文件扩展名)只是元音:

,请忽略
case $SHORT in ''|.*) continue;; esac