2017-05-10 2 views
1

파일 이름이 prefix 인 큰 세트 (약 10k)가 있습니다. 그들에는 어떤 확장도 없다. 나는 그들에게 각각 string을 포함하는 줄의 수에 상응하는 숫자 확장을주고 싶다. 나는이 번호를 찾을 GREP을 사용하는 방법을 알고 :grep에서 파일 확장명을 추가하십시오.

grep -c string * 

이 출력 (추출물)

prefix0123:1 
prefix9876:5 

내가 원하는, 확장으로 카운트를 추가 즉,

prefix0123.1 
prefix9876.5 
얻는 것입니다

나는 bash 콘솔에서 일하고있다.

답변

0

당신은 각 파일에 대해 한 번 grep 명령을 실행하고 새 파일 이름에 직접 출력을 대체 할 수 : grep이를 좋아하지 않을 것이다, 나는 명시 적으로 비정규직 파일을 제외 한

for i in * 
do 
    test -f "$i" || continue 
    mv -nv "$i" "$i.$(grep -c string "$i")" 
done 

디렉토리를 인자로 사용합니다 (선택하면 심볼릭 링크를 허용 할 수 있습니다). 또한 move 명령에 -n을 추가 했으므로 실수로 기존 파일을 덮어 쓰지 않습니다.

1

가장 좋은 방법은 경우 확인하기 echo "$file" "${file}.${count}" 처음으로 mv를 대체 할 수

grep -cr bash * | while IFS=':' read -r file count; do 
    mv -v "$file" "${file}.${count}" 
done 

로 재 명명 한 후 -r 플래그와 함께 사용하여 반복 검색을 추가하여 grepfile:count 쌍을 생성하는 것입니다 모든 파일의 이름이 일 때으로 변경된 후 mv 명령을 사용하십시오.

+2

'*'가 정확히 하나의 파일과 일치하면이 기능을 사용할 수 있습니까? GNU grep에서는'grep -H'가 항상 작동합니다. –

+0

@TobySpeight : 제안에 감사드립니다. 그의 산출물에 따라 OP가 결정할 것입니다. – Inian

+0

필자는 Toby Speight의 솔루션을 선호한다. 귀하의 솔루션에는 다른 이점이 없다고 가정하지 않습니다. – equaeghe