Переименовать несколько файлов gopro - PullRequest
0 голосов
/ 13 января 2020

У меня есть видео файлы с такой структурой: GX**####, где #### - номер видео. Но иногда видео делятся на 2 или 3 файла, например: GX01#### и GX02#### Моя проблема в том, что для организации папок я предпочитаю переименовывать их так: GX####-1 и GX####-2.

Поэтому я задаю вам вопрос, могу ли я создать скрипт / команду для автоматического переименования моих файлов, чтобы сделать это? Я могу использовать .bat windows файлы или. sh linux файлы. Моя главная проблема заключается в том, что я не знаю команду для простого переименования файлов (я видел много решений, которые переписывают весь файл). Может быть, если вы знаете только это, я могу сделать мой сценарий.

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 13 января 2020

Вы можете l oop просматривать файлы и использовать расширение параметров PE для нарезки и перемешивания строк и mv для переименования файлов.

Вот пример, сначала давайте создадим пустые файлы, используя touch , но сначала нам нужно создать новый каталог (папку, как вы ее называете) и go в этот новый каталог, используя mkdir и cd.

mkdir newdirectory && cd newdirectory 

Теперь создайте пустые файлы, используя touch.

touch GX01#### GX02#### GX03#### GX04####

Теперь проверьте пустые файлы, используя ls

ls *

Вывод должен выглядеть так:

GX01####  GX02####  GX03####  GX04####

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

for file in GX*; do
  file1="${file#*??}"
  file2=${file1#*??}
  file3=${file1%*$file2}
  echo mv -v "$file" "${file%*$file1}${file2}"-"$file3"
done

Выход должен быть на stdout (это ваш экран) из-за эха.

mv -v GX01#### GX####-01
mv -v GX02#### GX####-02
mv -v GX03#### GX####-03
mv -v GX04#### GX####-04

Если вы удовлетворены тем, что видите, то удалите echo , поэтому mv может переименовывать файлы. Вот пример того, как выполняется нарезка.

file=GX01####
file1="${file#*??}"
file2=${file1#*??}
file3="${file1%*$file2}"
printf '%s\n' "$file1" "$file2" "$file3"

Вывод должен быть примерно таким.

01####
####
01

? означает одну строку из оболочка.

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

Также вам, вероятно, следует использовать перетаскивание оболочки, например nullglob см.

http://mywiki.wooledge.org/glob#nullglob

См. Man bash и найдите Расширение параметров.

PAGER='less +/^[[:space:]]*parameter\ expansion' man bash

Некоторые онлайн-ресурсы с подробным объяснением и примерами.

http://mywiki.wooledge.org/BashFAQ/073

https://wiki.bash-hackers.org/syntax/pe

2 голосов
/ 13 января 2020

Вы можете повторить исходные и новые имена файлов:

for f in GX*; do
    echo "$f" $(sed 's/^GX\(..\)\(.*\)/GX\2-\1/' <<< "$f")
done

, которые должны вывести:

GX01#### GX####-01
GX02#### GX####-02

, а затем использовать mv -n вместо echo для переименования файлов.

...