Вы можете использовать rename
команду, которая на самом деле сценарий Perl, следующим образом:
rename --dry-run 'my $fn=$_; open my $fh,"<$_"; while(<$fh>){}; $_=$fn; s/.txt$/-$..txt/' *txt
Пример вывода
'tight_layout1.txt' would be renamed to 'tight_layout1-519.txt'
'tight_layout2.txt' would be renamed to 'tight_layout2-1122.txt'
'tight_layout3.txt' would be renamed to 'tight_layout3-921.txt'
'tight_layout4.txt' would be renamed to 'tight_layout4-1122.txt'
Если вам нравится то, что он говорит, удалить --dry-run
и снова запустите.
Сценарий подсчитывает строки в файле без каких-либо внешних процессов, а затем переименовывает их, как вы просите, также без использования каких-либо внешних процессов, поэтому он достаточно эффективен.
Или, если вы счастливы, чтобы вызвать внешний процесс для подсчета линий, а также избегать метода Perl выше:
rename --dry-run 's/\.txt$/-`grep -ch "^" "$_"` . ".txt"/e' *txt
Вы говорите о лавируя выход туалет на конце имени файла или в конце содержимого файла? [edit] ваш вопрос, чтобы включить краткий, проверяемый ввод проб и ожидаемый результат. Я поражен, что у вас есть 4 upvotes для вопроса без примера! Я видел несколько вопросов, когда люди помещали разделитель сценариев '' 's ** в скрипт ** - (' awk {'foo'} 'вместо' awk '{foo}' ') - где черт есть THAT идея, исходящая от ??? –