У меня есть много файлов с расширением .abc и вы хотите изменить их на .edefg Как это сделать из командной строки?
У меня есть корневая папка со многими подпапками, поэтому решение должен работать рекурсивно.
Портативный способ (который будет работать в любой POSIX-совместимой системе):
find /the/path -depth -name "*.abc" -exec sh -c 'mv "$1" "${1%.abc}.edefg"' _ {} \;
В bash4 вы можете использовать globstar для получения рекурсивных глобусов (**):
shopt -s globstar
for file in /the/path/**/*.abc; do
mv "$file" "${file%.abc}.edefg"
done
Команда (perl) rename в Ubuntu может переименовывать файлы с использованием синтаксиса регулярных выражений perl, который вы можете комбинировать с globstar или find:
# Using globstar
shopt -s globstar
files=(/the/path/**/*.abc)
# Best to process the files in chunks to avoid exceeding the maximum argument
# length. 100 at a time is probably good enough.
# See http://mywiki.wooledge.org/BashFAQ/095
for ((i = 0; i < ${#files[@]}; i += 100)); do
rename 's/\.abc$/.edefg/' "${files[@]:i:100}"
done
# Using find:
find /the/path -depth -name "*.abc" -exec rename 's/\.abc$/.edefg/' {} +
Также см. http: // mywiki .wooledge.org / BashFAQ / 030
Это выполнит требуемую задачу, если все файлы находятся в одной папке
rename 's/.abc$/.edefg/' *.abc
Чтобы переименовать файлы, рекурсивно используйте это:
find /path/to/root/folder -type f -name '*.abc' -print0 | xargs -0 rename 's/.abc$/.edefg/'
Я использовал команду mmv из пакета с таким же именем:
mmv ';*.abc' '#1#2.edefg'
; соответствует нулю или больше */ и соответствует замене #1. [F6] соответствует #2. Нерекурсивная версия будет
mmv '*.abc' '#1.edefg'
Я нашел простой способ добиться этого. Чтобы изменить расширения многих файлов с jpg на pdf, используйте:
for file in /path/to; do mv $file $(basename -s jpg $file)pdf ; done
Это то, что я сделал и работал довольно просто так, как я хотел. Я использовал команду mv. У меня было несколько файлов .3gp, и я хотел переименовать их все в .mp4
. Вот короткая строка для него:
for i in *.3gp; do mv -- "$i" "ren-$i.mp4"; done
Что просто просматривает текущий каталог, собирает все .3gp-файлы, а затем переименовывает (используя mv) в ren-name_of_file.mp4
Портативный способ (который будет работать в любой POSIX-совместимой системе):
find /the/path -depth -name "*.abc" -exec sh -c 'mv "$1" "${1%.abc}.edefg"' _ {} \;
В bash4 вы можете использовать globstar для получения рекурсивных глобусов (**):
shopt -s globstar
for file in /the/path/**/*.abc; do
mv "$file" "${file%.abc}.edefg"
done
Команда (perl) rename в Ubuntu может переименовывать файлы с использованием синтаксиса регулярных выражений perl, который вы можете комбинировать с globstar или find:
# Using globstar
shopt -s globstar
files=(/the/path/**/*.abc)
# Best to process the files in chunks to avoid exceeding the maximum argument
# length. 100 at a time is probably good enough.
# See http://mywiki.wooledge.org/BashFAQ/095
for ((i = 0; i < ${#files[@]}; i += 100)); do
rename 's/\.abc$/.edefg/' "${files[@]:i:100}"
done
# Using find:
find /the/path -depth -name "*.abc" -exec rename 's/\.abc$/.edefg/' {} +
Также см. http: // mywiki .wooledge.org / BashFAQ / 030
Это выполнит требуемую задачу, если все файлы находятся в одной папке
rename 's/.abc$/.edefg/' *.abc
Чтобы переименовать файлы, рекурсивно используйте это:
find /path/to/root/folder -type f -name '*.abc' -print0 | xargs -0 rename 's/.abc$/.edefg/'
Я использовал команду mmv из пакета с таким же именем:
mmv ';*.abc' '#1#2.edefg'
; соответствует нулю или больше */ и соответствует замене #1. [F6] соответствует #2. Нерекурсивная версия будет
mmv '*.abc' '#1.edefg'
Я нашел простой способ добиться этого. Чтобы изменить расширения многих файлов с jpg на pdf, используйте:
for file in /path/to; do mv $file $(basename -s jpg $file)pdf ; done
Это то, что я сделал и работал довольно просто так, как я хотел. Я использовал команду mv. У меня было несколько файлов .3gp, и я хотел переименовать их все в .mp4
. Вот короткая строка для него:
for i in *.3gp; do mv -- "$i" "ren-$i.mp4"; done
Что просто просматривает текущий каталог, собирает все .3gp-файлы, а затем переименовывает (используя mv) в ren-name_of_file.mp4