у меня есть несколько папок с видео-файлами нужно быть переименована в что-то однородное, например: foldername.videotypexvideonumber.avi. Я посмотрел на создание сценария оболочки, чтобы сделать это проще. Команда mv, как представляется, быть лучший способ сделать это.[!однако н0]
, каждое руководство/учебник/страницу я видел, говорит, что когда я переименовать файл я должен также включать расширение файла. Обычно это нормально, но некоторые папки имеют видео файлов различных типов, например .MKV и .AVI и даже некоторые .файлов RMVB.
Итак, что мне нужно знать, если есть способ, чтобы переименовать файлы через терминал без указания типа файла при этом - в принципе, так что расширение остается прежним, независимо от того, что он до переименования.
Быстрый ответ:
Вы не можете этого сделать, поскольку расширения являются частью имени файла.
Быстрый ответ:
Вы можете использовать графический интерфейс для выполнения расширенных переименований как purrr или gprename
В вашем сценарии переименования пакетов вы можете использовать следующие методы разделения имен файлов: [ ! d7]
FULLFILENAME="/home/user/video/myvideo-release.xvid.128kbps.avi"
DIRNAME=$(dirname ${FULLFILENAME}) #-- /home/user/video
BASENAME=$(basename ${FULLFILENAME}) #-- myvideo-release.xvid.128kbps.avi
FILENAME=${BASENAME%.*} #-- myvideo-release.xvid.128kbps
EXTENSION=${BASENAME##*.} #-- avi
Быстрый ответ:
Вы не можете этого сделать, поскольку расширения являются частью имени файла.
Быстрый ответ:
Вы можете использовать графический интерфейс для выполнения расширенных переименований как purrr или gprename
В вашем сценарии переименования пакетов вы можете использовать следующие методы разделения имен файлов: [ ! d7] FULLFILENAME="/home/user/video/myvideo-release.xvid.128kbps.avi"
DIRNAME=$(dirname ${FULLFILENAME}) #-- /home/user/video
BASENAME=$(basename ${FULLFILENAME}) #-- myvideo-release.xvid.128kbps.avi
FILENAME=${BASENAME%.*} #-- myvideo-release.xvid.128kbps
EXTENSION=${BASENAME##*.} #-- avi
ответ:
Вы не можете сделать это с расширениями являются частью имени файла.
ответ:
Вы можете использовать графический интерфейс дополнительно переименовывает как [F2] или gprename
в пакетном переименовании скрипта вы можете использовать следующие методы разделения именем:
FULLFILENAME="/home/user/video/myvideo-release.xvid.128kbps.avi"
DIRNAME=$(dirname ${FULLFILENAME}) #-- /home/user/video
BASENAME=$(basename ${FULLFILENAME}) #-- myvideo-release.xvid.128kbps.avi
FILENAME=${BASENAME%.*} #-- myvideo-release.xvid.128kbps
EXTENSION=${BASENAME##*.} #-- avi
Быстрый ответ:
Вы не можете этого сделать, поскольку расширения являются частью имени файла.
Длинный ответ:
Вы можете использовать графический интерфейс для делать расширенные переименования как purrr
или gprename
В вашем скрипте переименования пакетов вы можете использовать следующие методы имени файла
FULLFILENAME = "/ home / user / video / myvideo-release.xvid.128kbps.avi" DIRNAME = $ (dirname $ {FULLFILENAME}) # - / home / user / video BASENAME = $ (basename $ {FULLFILENAME}) # - myvideo-release.xvid.128kbps.avi FILENAME = $ {BASENAME%. *} # - myvideo-release.xvid.128kbps EXTENSION = $ {BASENAME ## * .} # - avi
Быстрый ответ:
Вы не можете этого сделать, поскольку расширения являются частью имени файла.
Длинный ответ:
Вы можете использовать графический интерфейс для делать расширенные переименования как purrr
или gprename
В вашем скрипте переименования пакетов вы можете использовать следующие методы имени файла
FULLFILENAME = "/ home / user / video / myvideo-release.xvid.128kbps.avi" DIRNAME = $ (dirname $ {FULLFILENAME}) # - / home / user / video BASENAME = $ (basename $ {FULLFILENAME}) # - myvideo-release.xvid.128kbps.avi FILENAME = $ {BASENAME%. *} # - myvideo-release.xvid.128kbps EXTENSION = $ {BASENAME ## * .} # - avi
Быстрый ответ:
Вы не можете этого сделать, поскольку расширения являются частью имени файла.
Длинный ответ:
Вы можете использовать графический интерфейс для делать расширенные переименования как purrr
или gprename
В вашем скрипте переименования пакетов вы можете использовать следующие методы имени файла
FULLFILENAME = "/ home / user / video / myvideo-release.xvid.128kbps.avi" DIRNAME = $ (dirname $ {FULLFILENAME}) # - / home / user / video BASENAME = $ (basename $ {FULLFILENAME}) # - myvideo-release.xvid.128kbps.avi FILENAME = $ {BASENAME%. *} # - myvideo-release.xvid.128kbps EXTENSION = $ {BASENAME ## * .} # - avi
Быстрый ответ:
Вы не можете этого сделать, поскольку расширения являются частью имени файла.
Длинный ответ:
Вы можете использовать графический интерфейс для делать расширенные переименования как purrr
или gprename
В вашем скрипте переименования пакетов вы можете использовать следующие методы имени файла
FULLFILENAME = "/ home / user / video / myvideo-release.xvid.128kbps.avi" DIRNAME = $ (dirname $ {FULLFILENAME}) # - / home / user / video BASENAME = $ (basename $ {FULLFILENAME}) # - myvideo-release.xvid.128kbps.avi FILENAME = $ {BASENAME%. *} # - myvideo-release.xvid.128kbps EXTENSION = $ {BASENAME ## * .} # - avi
Быстрый ответ:
Вы не можете этого сделать, поскольку расширения являются частью имени файла.
Длинный ответ:
Вы можете использовать графический интерфейс для делать расширенные переименования как purrr
или gprename
В вашем скрипте переименования пакетов вы можете использовать следующие методы имени файла
FULLFILENAME = "/ home / user / video / myvideo-release.xvid.128kbps.avi" DIRNAME = $ (dirname $ {FULLFILENAME}) # - / home / user / video BASENAME = $ (basename $ {FULLFILENAME}) # - myvideo-release.xvid.128kbps.avi FILENAME = $ {BASENAME%. *} # - myvideo-release.xvid.128kbps EXTENSION = $ {BASENAME ## * .} # - avi
FILENAME = & quot; $ {BASENAME%. *} & Quot;
с кавычками, если имена файлов имеют в них пробелы.
– frabjous
22 January 2011 в 19:29
basename
и dirname
, когда знаете, как использовать расширение параметра? Кроме того, вам не удалось привести аргументы в basename
и dirname
, поэтому, если кто-то попробует ваше решение, у них появятся проблемы с именами файлов, содержащими специальные символы. И, наконец, соглашение заключается в использовании имен переменных нижнего регистра для всех, кроме переменных среды. См. [D0] mywiki.wooledge.org/Arguments
– geirha
2 February 2011 в 12:54
Это поможет точно узнать, что вы хотите сделать, но вы можете это сделать. Изучение расширения параметра BASH, вероятно, довольно необходимо.
В зависимости от того, что вам нужно делать, вам может потребоваться отделить расширение и имя файла, а может и нет.
Я предположим, что вы уже cd вышли в папку с файлами, о которых идет речь.
case 1: предположим, что вы хотите изменить строку «bad» на «good» в каждом имени файла; то вы можете использовать простую подстановку, т. е. вы можете сделать что-то вроде:
for file in * ; do mv "$file" "${file//bad/good}" ; done
(Удостоверьтесь, что нет никаких изменений, которые изменяют плохое, чтобы хорошо перезаписывать что-то уже есть.) Это будет работать независимо от расширения.
case 1: Suppse вам нужно добавить «новое» перед расширением, что бы это ни было, тогда вы можете сделать:
for file in * ; do filename="${file%.*}" ; extension="${file##*.}" ; mv "$file" "${filename}new.${extension}" ; done
Расширение останется неизменным, каково бы оно ни было.
Я бы дал больше советов, но опять же, я действительно не знаете, что вы пытаетесь сделать, точно.
[temp] λ = ls
test.doc test.rtf test.txt
[temp] λ = for f in *; do mv "$f" test2`echo "$f" | sed 's/[^.]*//'`; done
[temp] λ = ls
test2.doc test2.rtf test2.txt
Там может быть более элегантный способ сделать это, но он работает
Замените test2 тем, что вы хотите на счетчик или что-то в этом роде.
это поможет точно знать, что вы хотите сделать, но вы, конечно, можете сделать это. Узнав о bash расширения параметр, вероятно, довольно надо.
в зависимости от того, что вы что делать, вам может потребоваться отдельная расширением и именем, а может и нет.
я собираюсь предполагаю, что вы уже cdЭд в папку с файлами в вопрос.
случай 1: предположим, что вы хотите изменить строку "плохо" до "хорошо" в каждом имени файла; затем вы можете использовать простой подстановки, т. е. вы можете сделать что-то вроде:
for file in * ; do mv "$file" "${file//bad/good}" ; done
(убедитесь, что нет никаких изменений, что изменение к лучшему будет перезаписать что-то уже есть.) Это сработает независимо от расширения.
вариант 1: Suppse вам нужно добавить "новый" перед расширением, что бы это ни было, то можно сделать так:
for file in * ; do filename="${file%.*}" ; extension="${file##*.}" ; mv "$file" "${filename}new.${extension}" ; done
расширение останется тем же, каким бы он ни был.
я бы дал больше советов, но опять же, я действительно не знаю, что ты пытаешься сделать, точно.
[temp] λ = ls
test.doc test.rtf test.txt
[temp] λ = for f in *; do mv "$f" test2`echo "$f" | sed 's/[^.]*//'`; done
[temp] λ = ls
test2.doc test2.rtf test2.txt
там может быть более элегантный способ сделать это, но это работает
заменить test2 по все, что вы хотите счетчик или что-то.
это поможет точно знать, что вы хотите сделать, но вы, конечно, можете сделать это. Узнав о bash расширения параметр, вероятно, довольно надо.
в зависимости от того, что вы что делать, вам может потребоваться отдельная расширением и именем, а может и нет.
я собираюсь предполагаю, что вы уже cdЭд в папку с файлами в вопрос.
случай 1: предположим, что вы хотите изменить строку "плохо" до "хорошо" в каждом имени файла; затем вы можете использовать простой подстановки, т. е. вы можете сделать что-то вроде:
for file in * ; do mv "$file" "${file//bad/good}" ; done
(убедитесь, что нет никаких изменений, что изменение к лучшему будет перезаписать что-то уже есть.) Это сработает независимо от расширения.
вариант 1: Suppse вам нужно добавить "новый" перед расширением, что бы это ни было, то можно сделать так:
for file in * ; do filename="${file%.*}" ; extension="${file##*.}" ; mv "$file" "${filename}new.${extension}" ; done
расширение останется тем же, каким бы он ни был.
я бы дал больше советов, но опять же, я действительно не знаю, что ты пытаешься сделать, точно.
[temp] λ = ls
test.doc test.rtf test.txt
[temp] λ = for f in *; do mv "$f" test2`echo "$f" | sed 's/[^.]*//'`; done
[temp] λ = ls
test2.doc test2.rtf test2.txt
там может быть более элегантный способ сделать это, но это работает
заменить test2 по все, что вы хотите счетчик или что-то.
[temp] λ = ls test.doc test.rtf test.txt [temp] λ = для f in *; do mv "$ f" test2`echo "$ f" | sed 's /[^.]*//' `; done [temp] λ = ls test2.doc test2.rtf test2.txt
Возможно, существует более элегантный способ сделать это, но он работает
Замените test2 на все, что вам нужно, счетчик или что-то в этом роде.
Это поможет узнать точно , что вы хотите сделать, но вы, безусловно, можете это сделать. Изучение Расширение параметра BASH , вероятно, очень необходимо.
В зависимости от того, что вам нужно делать, вам может потребоваться отделить расширение и имя файла, а может и нет.
Я предполагаю, что вы уже cd
ed в папку с файлами, о которых идет речь.
case 1: предположим, что вы хотите изменить строку «плохо» на «хорошо» в каждом имени файла; то вы можете использовать простую подстановку, т. е. вы можете сделать что-то вроде:
для файла в *; make mv "$ file" "$ {file // bad / good}"; done
(Удостоверьтесь, что нет изменений, которые изменяют плохое на хорошее, перезапишут что-то уже там.) Это будет работать независимо от расширения.
case 2 : Suppse вам нужно добавить «новое» перед расширением, что бы это ни было, тогда вы можете сделать:
для файла в *; do filename = "$ {file%. *}"; extension = "$ {file ## *.}"; mv "$ file" "$ {filename} new. $ {extension}";
Расширение останется прежним, что бы оно ни было.
Я бы дал больше советов, но опять же, я действительно не знаю, пытаясь сделать, точно.
[temp] λ = ls test.doc test.rtf test.txt [temp] λ = для f in *; do mv "$ f" test2`echo "$ f" | sed 's /[^.]*//' `; done [temp] λ = ls test2.doc test2.rtf test2.txt
Возможно, существует более элегантный способ сделать это, но он работает
Замените test2 на все, что вам нужно, счетчик или что-то в этом роде.
Это поможет узнать точно , что вы хотите сделать, но вы, безусловно, можете это сделать. Изучение Расширение параметра BASH , вероятно, очень необходимо.
В зависимости от того, что вам нужно делать, вам может потребоваться отделить расширение и имя файла, а может и нет.
Я предполагаю, что вы уже cd
ed в папку с файлами, о которых идет речь.
case 1: предположим, что вы хотите изменить строку «плохо» на «хорошо» в каждом имени файла; то вы можете использовать простую подстановку, т. е. вы можете сделать что-то вроде:
для файла в *; make mv "$ file" "$ {file // bad / good}"; done
(Удостоверьтесь, что нет изменений, которые изменяют плохое на хорошее, перезапишут что-то уже там.) Это будет работать независимо от расширения.
case 2 : Suppse вам нужно добавить «новое» перед расширением, что бы это ни было, тогда вы можете сделать:
для файла в *; do filename = "$ {file%. *}"; extension = "$ {file ## *.}"; mv "$ file" "$ {filename} new. $ {extension}";
Расширение останется прежним, что бы оно ни было.
Я бы дал больше советов, но опять же, я действительно не знаю, пытаясь сделать, точно.
[temp] λ = ls test.doc test.rtf test.txt [temp] λ = для f in *; do mv "$ f" test2`echo "$ f" | sed 's /[^.]*//' `; done [temp] λ = ls test2.doc test2.rtf test2.txt
Возможно, существует более элегантный способ сделать это, но он работает
Замените test2 на все, что вам нужно, счетчик или что-то в этом роде.
Это поможет узнать точно , что вы хотите сделать, но вы, безусловно, можете это сделать. Изучение Расширение параметра BASH , вероятно, очень необходимо.
В зависимости от того, что вам нужно делать, вам может потребоваться отделить расширение и имя файла, а может и нет.
Я предполагаю, что вы уже cd
ed в папку с файлами, о которых идет речь.
case 1: предположим, что вы хотите изменить строку «плохо» на «хорошо» в каждом имени файла; то вы можете использовать простую подстановку, т. е. вы можете сделать что-то вроде:
для файла в *; make mv "$ file" "$ {file // bad / good}"; done
(Удостоверьтесь, что нет изменений, которые изменяют плохое на хорошее, перезапишут что-то уже там.) Это будет работать независимо от расширения.
case 2 : Suppse вам нужно добавить «новое» перед расширением, что бы это ни было, тогда вы можете сделать:
для файла в *; do filename = "$ {file%. *}"; extension = "$ {file ## *.}"; mv "$ file" "$ {filename} new. $ {extension}";
Расширение останется прежним, что бы оно ни было.
Я бы дал больше советов, но опять же, я действительно не знаю, пытаясь сделать, точно.
[temp] λ = ls test.doc test.rtf test.txt [temp] λ = для f in *; do mv "$ f" test2`echo "$ f" | sed 's /[^.]*//' `; done [temp] λ = ls test2.doc test2.rtf test2.txt
Возможно, существует более элегантный способ сделать это, но он работает
Замените test2 на все, что вам нужно, счетчик или что-то в этом роде.
Это поможет узнать точно , что вы хотите сделать, но вы, безусловно, можете это сделать. Изучение Расширение параметра BASH , вероятно, очень необходимо.
В зависимости от того, что вам нужно делать, вам может потребоваться отделить расширение и имя файла, а может и нет.
Я предполагаю, что вы уже cd
ed в папку с файлами, о которых идет речь.
case 1: предположим, что вы хотите изменить строку «плохо» на «хорошо» в каждом имени файла; то вы можете использовать простую подстановку, т. е. вы можете сделать что-то вроде:
для файла в *; make mv "$ file" "$ {file // bad / good}"; done
(Удостоверьтесь, что нет изменений, которые изменяют плохое на хорошее, перезапишут что-то уже там.) Это будет работать независимо от расширения.
case 2 : Suppse вам нужно добавить «новое» перед расширением, что бы это ни было, тогда вы можете сделать:
для файла в *; do filename = "$ {file%. *}"; extension = "$ {file ## *.}"; mv "$ file" "$ {filename} new. $ {extension}";
Расширение останется прежним, что бы оно ни было.
Я бы дал больше советов, но опять же, я действительно не знаю, пытаясь сделать, точно.
[temp] λ = ls test.doc test.rtf test.txt [temp] λ = для f in *; do mv "$ f" test2`echo "$ f" | sed 's /[^.]*//' `; done [temp] λ = ls test2.doc test2.rtf test2.txt
Возможно, существует более элегантный способ сделать это, но он работает
Замените test2 на все, что вам нужно, счетчик или что-то в этом роде.
Это поможет узнать точно , что вы хотите сделать, но вы, безусловно, можете это сделать. Изучение Расширение параметра BASH , вероятно, очень необходимо.
В зависимости от того, что вам нужно делать, вам может потребоваться отделить расширение и имя файла, а может и нет.
Я предполагаю, что вы уже cd
ed в папку с файлами, о которых идет речь.
case 1: предположим, что вы хотите изменить строку «плохо» на «хорошо» в каждом имени файла; то вы можете использовать простую подстановку, т. е. вы можете сделать что-то вроде:
для файла в *; make mv "$ file" "$ {file // bad / good}"; done
(Удостоверьтесь, что нет изменений, которые изменяют плохое на хорошее, перезапишут что-то уже там.) Это будет работать независимо от расширения.
case 2 : Suppse вам нужно добавить «новое» перед расширением, что бы это ни было, тогда вы можете сделать:
для файла в *; do filename = "$ {file%. *}"; extension = "$ {file ## *.}"; mv "$ file" "$ {filename} new. $ {extension}";
Расширение останется прежним, что бы оно ни было.
Я бы дал больше советов, но опять же, я действительно не знаю, пытаясь сделать, точно.
[DB] _2437968_Bleach_298.avi
в Bleach.09x12.avi
- это не проблема, если каждый файл имеет такое же расширение. Я хочу изменить имя файла только i> перед расширением.
– Saladin Akara
22 January 2011 в 20:20
09x12
, и как вы определяете, какую часть старого имени файла использовать, например? как вы могли бы использовать Bleach
в этом случае?
– geirha
22 January 2011 в 21:29