Файлы Mv с двузначным номером

Как отмечали другие, sed и другие текстовые -инструменты не будут работать должным образом, если какие-либо части скрипта выглядят как комментарии, но на самом деле таковыми не являются. Например, вы можете найти #внутри строки или довольно распространенные $#и ${#param}.

Я написал средство форматирования оболочки под названием shfmt , в котором есть функция минимизации кода. Среди прочего, это включает в себя удаление комментариев :

.

$ cat foo.sh
echo $# # inline comment
# lone comment
echo '# this is not a comment'
[mvdan@carbon:12] [0] [/home/mvdan]
$ shfmt -mn foo.sh
echo $#
echo '# this is not a comment'

Синтаксический анализатор и принтер являются пакетами Go, поэтому, если вам нужно индивидуальное решение, должно быть довольно легко написать программу Go из 20 -строк для удаления комментариев именно так, как вы хотите.

-2
30.03.2020, 02:31
3 ответа

Решение bash. Использование флага -aиз встроенного readи подстановки команд и строки здесь.

for f in *.mp3; do
  renamed=$(
    read -ra var <<< "$f"
    printf '%s' "${var[1]} ${var[2]} ${var[3]} ${var[4]%.*} ${var[0]/%/.${var[4]##*.}}"
  )
  echo mv -v -- "$f" "$renamed"
done

Удалите echo, если вас устраивает результат.

0
19.03.2021, 02:31

Вы можете попробовать это:

for f in *.mp3; do 
  foo=$(echo "${f%.*} ${f%%[^0-9]*}.mp3")
  mv "$f" "${foo#[0-9]* }"
done

Что приводит к:

'Disc 01 My Song 01.mp3'
'Disc 01 My Song 02.mp3'
'Disc 01 My Song 03.mp3'
'Disc 01 My Song 04.mp3'
'Disc 01 My Song 05.mp3'
'Disc 01 My Song 06.mp3'
'Disc 01 My Song 07.mp3'
'Disc 01 My Song 08.mp3'
'Disc 01 My Song 09.mp3'
0
19.03.2021, 02:31

IIUC, вы можете использовать реализацию Perl renameпрограммы (есть другая программа под названием rename, которая является частью util-linuxпакет ). Пример -Сначала давайте -создадим список файлов, которые вы представлены в вашем вопросе:

$ touch 0{1..9}\ Disc\ 01\ My\ Song.mp3
$ ls -l
total 0
-rw-r--r-- 1 ja users 0 Mar 30 01:41 01 Disc 01 My Song.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:41 02 Disc 01 My Song.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:41 03 Disc 01 My Song.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:41 04 Disc 01 My Song.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:41 05 Disc 01 My Song.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:41 06 Disc 01 My Song.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:41 07 Disc 01 My Song.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:41 08 Disc 01 My Song.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:41 09 Disc 01 My Song.mp3

Запустите renameи снова выведите список файлов::

$ rename 's,([0-9]+) Disc 01 My Song.mp3,Disc 01 My song $1.mp3,' *
$ ls -l
total 0
-rw-r--r-- 1 ja users 0 Mar 30 01:42 Disc 01 My song 01.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:42 Disc 01 My song 02.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:42 Disc 01 My song 03.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:42 Disc 01 My song 04.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:42 Disc 01 My song 05.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:42 Disc 01 My song 06.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:42 Disc 01 My song 07.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:42 Disc 01 My song 08.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:42 Disc 01 My song 09.mp3
2
19.03.2021, 02:31

Теги

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