2012-03-25 10 views
0

私は "CODE(GRADE)"と呼ばれる一連のディレクトリを持っており、それらをすべて "CODE"に名前変更して、それぞれが "GRADE.grade"と呼ばれる新しい空ファイルを作成したいとします。ディレクトリを見つけて部分的なディレクトリ名をタッチしますか?

これを行う最も簡単な方法は何ですか?

私の現在の考え方:

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サイクル。)

関連する問題