Переименовать файл, удалив повторяющиеся подстроки, содержащиеся в именах файлов

У меня была аналогичная проблема при первом использовании i3. Я обнаружил, что самым простым решением было просто добавить быстрый sleepв -между каждым приложением. Например, это часть моего раздела команд запуска моегоi3/config:

exec --no-startup-id sh -c 'sleep 1; i3-msg "workspace 10: <icon>"'
exec --no-startup-id "sh -c 'sleep 2; exec gnome-terminal --working-directory=/media/Data/Music -e ranger'"
exec --no-startup-id sh -c 'sleep 3; i3-msg "splitv"'
exec --no-startup-id sh -c 'sleep 4; exec gnome-terminal -e cava'
exec --no-startup-id sh -c 'sleep 5; i3-msg "focus up"; i3-msg "splith"'
exec --no-startup-id sh -c 'sleep 6; i3-msg "workspace 3: <icon>"'

Это переключает на другие рабочие пространства и открывает другие приложения/терминалы.

1
14.10.2021, 14:30
2 ответа

Использование расширения параметра :

for i in *.json; do
  a="${i##*_run}"
  b="${i%%_run*}"
  n="$b""_run$a"
  # mv -- "$i" "$n"
  printf "%s" "$n"
done
sub-2795479_ses-V1_task-rest_acq-REST1_dir-AP_run-01_bold.json

Для переименования затем:

mv -- "$i" "$n"

Примечание :Делайте резервные копии файлов при выполнении операций удаления/перемещения.

0
14.10.2021, 15:30

Или перл:

$ f=sub-2795479_ses-V1_task-rest_acq-REST1_dir-AP_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_bold.json
$ g=$(perl -pe 's/(_run-0[1-4])\1+/$1/' <<< "$f")
$ echo "$g"
sub-2795479_ses-V1_task-rest_acq-REST1_dir-AP_run-01_bold.json

с помощью Perl -ароматизированной rename(1)программы:

$ touch "$f"
$ ls sub*json
sub-2795479_ses-V1_task-rest_acq-REST1_dir-AP_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_bold.json
$ rename 's/(_run-0[1-4])\1+/$1/' sub*json
$ ls sub*json
sub-2795479_ses-V1_task-rest_acq-REST1_dir-AP_run-01_bold.json
1
14.10.2021, 18:08

Теги

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