Intereting Posts
независимо убедитесь, что TRIM действительно работает на SSD Правильное понимание прав для cp Как проверить, не существует ли файл с использованием ZSH? Оболочка и позиционные параметры оболочки Постфикс электронной почты отскочил (почта для домена возвращается к себе) Протяните устройство через USB или wlan Добавить человекообразную метку времени последнего редактирования в имя файла Альтернатива rsync -delete для перемещения файлов в другой каталог вместо удаления Синтаксис smtp_url в muttrc как я могу прочитать число с файлом (магия)? Слияние двух источников звука с x11grab, возможно? Как вы получаете доступ к содержимому предыдущего монтирования после переключения на другой раздел? Ошибка сборки mdadm RAID1 после изменения размера разделов Копирование файлов с разными именами из разных каталогов сообщение «done» после того, как & -команда не отображается сразу же, но после действия пользователя. Зачем?

переименование mp3-файлов, начинающихся с "-"

Я извлек песни из своего ipod, но при этом каждая песня была переименована в «[оригинальное название песни]». Я хотел написать сценарий bash, который удалит это первое «-», потому что там может быть 1000 песен, и я не могу переименовать каждый из них вручную. Я пытался сделать это с помощью mv и переименовать, но он не будет работать из-за специальных символов. Я просмотрел его в Интернете, и я нашел решение, которое заключается в замене «-» на «», но проблема в том, что я хочу удалить только первые «-», а не потенциальные другие, которые могут быть в моей песне имя. Надеюсь, я был достаточно ясен, и кто-то может мне помочь?

Вот мой оригинальный сценарий:

#!/bin/bash for f in *; do echo "${f}"; if [[ ${f:0:1} == "-" ]]; then echo "renaming ${f}"; rename.ul ${f} ${f:1} *.mp3; fi done 

 for f in -*.mp3; do echo mv -- "$f" "${f:1}" done 

Когда вы уверены, что он делает то, что вы хотите, удалите echo .

Двойная тире ( -- ) необходима, чтобы остановить mv от интерпретации - в именах файлов в качестве опции. Цитирование переменных необходимо для случаев, когда имена файлов содержат пробелы.

Когда вы передаете аргумент, начинающийся с тире для команды, и вы не хотите, чтобы этот аргумент был интерпретирован как опция, сначала передайте -- (двойную тире) в качестве аргумента. При почти всех командах -- значит «после этого больше нет параметров».

 rename.ul -- '-' '' -* 

Другая возможность заключается в том, чтобы аргумент не начинался с тире. Это не всегда возможно, но для имени файла это: add ./ спереди.

 rename.ul ./- ./ ./-* 

Обратите внимание, что вам не нужен цикл. – rename доволен списком файлов в качестве аргументов. Также вам не нужно передавать полное имя файла, просто часть, которую вы хотите переименовать. (На самом деле одна из проблем с вашим скриптом заключается в том, что вы смешиваете вещи, передавая все имя файла как заменяемую строку, а затем передавая список всех файлов каждый раз.)

Также всегда ставьте двойные кавычки вокруг переменных подстановок , иначе ваш скрипт не будет работать с именами файлов, содержащими пробелы.