遍历目录的所有文件并对它们执行操作?

时间:2014-01-16 19:10:11

标签: shell

所以我想在我的Mac上做一个Shell脚本(.sh),但是我很难...... 因此,对于每个文件,我想复制它并将其转换为另一种类型(.less to .css)。我知道该怎么做了:

 lessc fileToConvert.less destinationOfConvertedFile.css

现在我的问题是将它集成到循环中(循环文件夹的所有文件)。我试过了,但似乎没有任何效果:

alias proj="cd /Users/maxwell/Documents/WebStorm"
for /D /r %%G in * DO Echo We found %%G

我试过这个测试,但即使这样也行不通。有什么想法吗?

2 个答案:

答案 0 :(得分:5)

find命令与-exec开关一起使用或将find的输出管道传输到xargs

例如:

find . -name "*.less" -exec sh -c 'lessc "{}" "$(basename "{}" .less).css"' \;

这将从当前目录以递归方式查找任何带* .less扩展名的文件,并使用filename作为lessc的参数。输出文件名将与输入文件名相同,但扩展名不同。

请注意,我的系统上没有安装lessc,所以我无法测试这个确切的示例,但它应该是正确的,或者非常接近。

答案 1 :(得分:4)

这里我创建了一个名为test的子文件夹。里面是我所有的* .less文件。运行后,它会输出带有相应名称的.css文件。您可以轻松修改路径以适合您的文件夹结构。

#!/bin/bash
FILES=./test/*.less
for f in $FILES
do
    echo "$f"
    FULL_FILENAME=$f
    FILENAME=${FULL_FILENAME##*/}
    echo ${FILENAME%%.*}
    DIR=${PWD##*/}
    lessc $f ./test/${FILENAME%%.*}.css
done

如果您需要在1-liner中为.bash_profile中的此脚本创建别名,那么您可以从任何地方调用它。

编辑:这有助于确定bash循环http://www.cyberciti.biz/faq/bash-loop-over-file/

干杯