2012-03-25 109 views
0

我有一組名爲「CODE(GRADE)」的目錄,並希望將它們全部重命名爲「CODE」,在每個名爲「GRADE.grade」中創建一個新的空文件。查找目錄,然後觸摸部分目錄名稱?

bash中最簡單的方法是什麼?

我目前的想法:

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

回答

1

如果路徑中的唯一空間是在目標目錄中的名稱,你可以像這樣的東西離開。

find -type d -name '* (*)' -print | 
while read path grade; do 
    mv "$path $grade" "$path" 
    grad=${grade%\)} 
    touch "$path/${grad#\(}".grade 
done 
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週期)。