Как очистить расширения файла?

Другая вещь проверить состоит в том, если Ваша система устанавливает переменную среды TMOUT. Для проверки этого, можно просто сделать:

env | grep TMOUT

или

echo $TMOUT

Если это установлено, Вы могли бы изменить его или сбросить его. Изменить значение:

export TMOUT=3600

Где число является числом секунд, пока Вы не выходитесь из системы. Иначе сбросьте его для выключения функции:

unset TMOUT

Отметьте, может случиться так, что Ваш системный администратор установил это из соображений безопасности. Таким образом, если Вы не системный администратор, можно хотеть проверить это прежде, чем изменить что-либо сами.

9
13.06.2011, 12:23
7 ответов

Вот один способ сделать это в Bash:

for i in *; do [ "${i/%MP3/mp3}" != "$i" ] && echo "$i" "${i/%MP3/mp3}"; done

Я использовал echo здесь, таким образом, сама команда ничего не делает кроме пар печати имен файлов. Если тот список представляет изменения, Вы хотите сделать, то можно измениться echo к чему-то как mv -i -- который затем переместит Ваши файлы (и предложит Вам прежде, чем перезаписать).

Краткое объяснение:

for выполняет итерации через каждый файл, подобранный *. Затем мы определяем, является ли расширение уже нижним регистром, если это, мы идем дальше, если это не, мы продолжаем перемещать его (или повторять его, в зависимости от обстоятельств). Это использует Bash, создал в строковых операциях, о которых можно читать здесь: http://tldp.org/LDP/abs/html/string-manipulation.html

12
27.01.2020, 20:04
  • 1
    Спасибо за Ваш ответ и указание на меня к ссылке на обработку строк удара! –   02.02.2011, 00:03

В zsh:

autoload zmv
zmv '(*).MP3' '$1.mp3'   # rename files in the current directory only
zmv '(**/)(*).MP3' '$1$2.mp3'  # rename files in subdirectories as well

Также заботиться о .Mp3 или .mP3 файлы:

zmv '(**/)(*).(#i)mp3' '$1$2.mp3'
7
27.01.2020, 20:04

Вы могли использовать переименовать команду (остерегайтесь существует две основных реализации с различными API) для тех. Например, для изменения случая расширений файла от верхнего для понижения попробуйте это:

  • с rename от util-linux (иногда называемый rename.ul), принятие .JPG происходит только однажды в именах файлов

    rename -- .JPG .jpg *.JPG
    
  • с rename от perl (иногда называемый prename; несколько вариантов были опубликованы):

    rename 's/\.JPG$/.jpg/' ./*.JPG
    

Вот некоторое учебное руководство парней о том, как он переместился от грязного сценария удара до этой простой команды для точно Вашего примера использования.

Другая необычная команда, чтобы сделать это pax. При использовании ZSH для оболочки Вы могли бы также использовать zmv.

6
27.01.2020, 20:04
  • 1
    супер! точно, что мне был нужен –  JoshP 25.06.2013, 00:02
  • 2
    я получаю ошибку syntax error at (user-supplied code), near ".", когда я выполняю эту команду. спасибо –  Ryan Gates 06.06.2017, 04:31

Использование perl-переименовывает, швейцарский нож переименования файла с регулярными выражениями (на человечности, это связывается пакетом жемчуга как предварительное имя):

# Replace prename as appropriate (i.e. if you've got it installed under a different name
find /RootPath -type f -iname '*.mp3' -print0 | xargs -0 prename 's/mp3$/mp3/i'

Если Вы - осторожный вид, используйте-n, и-v опции к жемчугу переименовывают для наблюдения то, что он на самом деле сделает.

3
27.01.2020, 20:04
  • 1
    Спасибо за Ваш ответ. Не имейте perlrename на сервере, но я собираюсь быть проигрыванием вокруг этого с ним позже сегодня! –   02.02.2011, 00:03

Вам нужен сценарий, потому что "расширения" в соответствии с Linux являются на самом деле просто частями строки имени файла. Необходимо сделать некоторую обработку строк в сценарии для получения нового имени.

#!/bin/bash
for NAME in *.JPG
do
    PREFIX=${NAME%.*}
    NEWNAME="$PREFIX.jpg"
    mv "$NAME" "$NEWNAME"
done

Двойное заключение в кавычки важно, если у Вас есть имена файлов с пробелом в них. Я думал, что часть двойного заключения в кавычки была небольшим inobvious.

0
27.01.2020, 20:04
  • 1
    Нет, ничто неправильно на - не говорит с Вашим сценарием, но Вам очень вызывающе не нужен сценарий для этого. Существует, вероятно, дюжина способов сделать это на одной строке в большинстве оболочек и много утилит для упрощения также. –  Caleb 11.06.2011, 22:43

В bash :

# renaming files in the current directory only
for f in *.MP3; do mv "$f" "${f%.MP3}.mp3"; done  

# renaming files in subdirectories as well
for f in *{,/*}.mp3; do mv "$f" "${f%.MP3}.mp3"; done
0
27.01.2020, 20:04

сначала сделайте резервную копию ваших файлов! вы можете использовать лайнер python one -:

python -c "import glob,os; [os.rename(fn, fn.replace('.MP3', '.mp3')) for fn in glob.glob('PATH_TO_YOUR_DIRECTORY')]"

РЕДАКТИРОВАТЬ:

Вот подробное объяснение того, как на самом деле работает один вкладыш -. Используя python -c, мы передаем команду интерпретатору Python. После импорта библиотек osдля функции renameи globдля списка файлов нам нужно перебрать список файлов в заданном каталоге, который я назвал PATH_TO_YOUR_DIRECTORY, например что-то вроде ./*для всего в текущем каталоге.

В синтаксисе one -liner, к сожалению, forциклы не работают после нотации import, поэтому нам нужно использовать скобочную нотацию. т.е. для каждого имени файла или каталога, которое globдает нам по заданному пути в виде строки, мы заменяем *.MP3 на *.mp3.

Поскольку в OP не упоминается рекурсивный поиск, я не стал включать его в первую очередь.

0
20.08.2021, 13:38

Теги

Похожие вопросы