查找目录,然后触摸部分目录名称?
问题描述:
我有一组名为“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周期)。