查找目录,然后触摸部分目录名称?

时间:2012-03-25 13:52:17

标签: bash

我有一组名为“CODE(GRADE)”的目录,并希望将它们全部重命名为“CODE”,在每个名为“GRADE.grade”的内部创建一个新的空文件。

bash中最简单的方法是什么?

我目前的想法:

find -iname "*(*)" --exec touch {}/MAGIC!.grade \;
rename 's/ \(.*$//' *(*)

2 个答案:

答案 0 :(得分:1)

如果路径中唯一的空间位于目标目录的名称中,您可以使用类似的东西。

find -type d -name '* (*)' -print |
while read path grade; do
    mv "$path $grade" "$path"
    grad=${grade%\)}
    touch "$path/${grad#\(}".grade
done

答案 1 :(得分:1)

单个文件名很容易:

grade=${file#*(}; grade=${grade%)}
code=${file% (*)}
mv -- "$file" "$code"
>> "$code/$grade.grade"

在每个文件上都这样做:

find . -type d -name '* (*)' -exec sh -c '
    for file
    do
        code from above goes here
    done
' -- {} +

(不要介意我使用>> file而不是touch file,只需节省一些CPU周期。)