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

问题描述:

我有一组名为“CODE(GRADE)”的目录,并希望将它们全部重命名为“CODE”,在每个名为“GRADE.grade”中创建一个新的空文件。查找目录,然后触摸部分目录名称?

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

我目前的想法:

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

如果路径中的唯一空间是在目标目录中的名称,你可以像这样的东西离开。

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

很容易在一个单一的文件名:

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周期)。