我有一组名为“CODE(GRADE)”的目录,并希望将它们全部重命名为“CODE”,在每个名为“GRADE.grade”的内部创建一个新的空文件。
bash中最简单的方法是什么?
我目前的想法:
find -iname "*(*)" --exec touch {}/MAGIC!.grade \;
rename 's/ \(.*$//' *(*)
答案 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周期。)