С версией переименования, которую вы, кажется, используете, следующее выражение
должно выполнить запрашиваемое вами преобразование (например, с каталогом
, содержащим файлы с именем File_Ex_ {1 .. 11} .jpg
):
$ rename -n -e 's/_(\d\.)/_0$1/g' -- *.jpg
'File_Ex_1.jpg' would be renamed to 'File_Ex_01.jpg'
'File_Ex_2.jpg' would be renamed to 'File_Ex_02.jpg'
'File_Ex_3.jpg' would be renamed to 'File_Ex_03.jpg'
'File_Ex_4.jpg' would be renamed to 'File_Ex_04.jpg'
'File_Ex_5.jpg' would be renamed to 'File_Ex_05.jpg'
'File_Ex_6.jpg' would be renamed to 'File_Ex_06.jpg'
'File_Ex_7.jpg' would be renamed to 'File_Ex_07.jpg'
'File_Ex_8.jpg' would be renamed to 'File_Ex_08.jpg'
'File_Ex_9.jpg' would be renamed to 'File_Ex_09.jpg'
(Удалите флаг -n
, чтобы фактически выполнить переименование.)
Аргумент -e
- это поиск Perl и -заменить выражение; где
_ (\ d \.)
соответствует знаку подчеркивания, за которым следует одна цифра, а затем точка
, и заменяет подчеркивание на _0
, таким образом вставляя ведущий
ноль. $ 1
является обратной ссылкой на группу в круглых скобках, цифру
и точку, и оставляет ее без изменений в новом имени файла.
Как упоминалось в комментариях, то, что вы просите, - это именно то, что делает comm
. Выполните comm -32 file1 file2
, чтобы увидеть строки в file1
, которых нет в file2
, или comm -31 file1 file2
, чтобы увидеть строки в file2
, которых нет в file1
, или comm -3 file1 file2
, чтобы увидеть строки, которые присутствуют только в одном из файлов, причем строки, уникальные для file2
, отделены табуляцией.
Обратите внимание, что comm
требует, чтобы его входные данные были отсортированы. Если у вас есть уже отсортированные файлы, убедитесь, что они отсортированы в той же локали.