2017-01-24 2 views
0

Изменение имени файлаИзмените имя файла. Explanation search-Substitution

Я хочу понять, как изменить имя файла с помощью терминала и Mac. Я искал и нашел множество решений. Например здесь: Using sed to mass rename files

Это изменяет файл с F00001-070 на F000-070.

for file in *.txt; do echo mv -v "$file" "${file/#F0000/F000}"; done 

Я тестировал и хорошо работает. Но теперь я пытаюсь изменить что от old-file.txt
в new-file.txt

for file in *.txt; do echo mv -v "$file" "${file/#old/new}”; done 

Это последняя один не работает.

Я думал, что file/#F0000/F000 означает изменение файлов, начинающихся с F0000 до F000. Должно быть, я ошибаюсь?

Может кто-то объяснить код и применить к тому, как изменить часть имени файла в начало, конец или в середине

+0

Помимо использования неправильно закрывающей кавычки (Unicode права двойных кавычек '» 'вместо ASCII прямой двойной кавычки' "' ), ваш второй пример в порядке. Всегда сообщайте * проблему * с кодом; не просто сказать, что «это не работает». – chepner

+0

@chpner ваш ответ правильный. Единственной проблемой была цитата. Вы должны сказать это как ответ. Я приму это – segon

+1

Добавляю ответ на данный момент; вопрос, вероятно, должен быть просто закрыт как не по теме (тип/не может воспроизвести). – chepner

ответ

1

Вашего закрытие цитата была неподходящей, Unicode права цитаты вместо ASCII прямой цитаты:

# bad 
for file in *.txt; do echo mv -v "$file" "${file/#old/new}”; done 
                 ^
# good 
for file in *.txt; do echo mv -v "$file" "${file/#old/new}"; done 
                 ^
+0

подходит для этого примера, но я думаю это плохой переписывающий, а не оригинальный код. В случае плохой конечной котировки код не будет интерпретироваться, ожидая закрытия цитаты с ошибкой, как 'неожиданный EOF при поиске соответствия \' "'' – NeronLeVelu

+0

@NeronLeVelu Я только опубликовал этот ответ, потому что OP буквально сказал, что это был проблемы и запросил его. – chepner

+0

Я читал это так (комментарий сказал, что это правильно), мой комментарий был просто для того, чтобы сказать, что это не настоящая проблема (мое общение), а больше имя файла, потому что OP ничего не пишет об ошибке, результат не является ожидаемым. – NeronLeVelu

0
for file in *.txt; do echo mv -v "$file" "${file/old/new}”; done 

на # не означает до где% означает, после в регулярном выражении, как поведение, так что удалить ваш #

# var=old-file.txt;echo ${var/%file*/new} 
old-new 
# var=old-file.txt;echo ${var/#*file/new} 
new.txt 

%% и ## означает максимально возможное выражение, где # и% первое вхождение

+0

Ваша версия работает хорошо, спасибо. Но я до сих пор не понимаю. Что означает #, когда я могу его применить? – segon

+0

# как% выражение, чтобы определить, как обрабатывать замену формы. # означает все * от начала до конца шаблона *, соответствующего следующему шаблону, включенному таким образом: '# F00' означает контент * начиная с F00 * где' # * F00' означает * от начала до F00 *, '%' делает то же самое с ther другая сторона содержимого – NeronLeVelu

+0

Нет ничего плохого в расширении параметра OP; его понимание правильное. Это неправильное цитирование. – chepner

Смежные вопросы