Повторное использование подобные флаги для нескольких команд

Используя rename (тот от perl иногда называемый prename, не от util-linux):

rename 's/(\d{2})(\d{2})(\d{2})(\d{2})/$1:$2:$3:$4/'  *.avi

Это переименовало бы имя файла как custom text 00030402.avi кому: custom text 00:03:04:02.avi.

Если Вы обратные косые черты в имени файла (прежде чем :), скажите:

rename 's/(\d{2})(\d{2})(\d{2})(\d{2})/$1\\:$2\\:$3\\:$4/' *.avi

Для удаления пользовательского текста из имен файлов скажите:

rename 's/.* (\d{2})(\d{2})(\d{2})(\d{2})(.*)/$1\\:$2\\:$3\\:$4$5/' *.avi
3
26.06.2014, 16:31
3 ответа

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

$ echo -e / --exclude=/dir1 --exclude=/dir2 --exclude=/dir3/dir4
/ --exclude=/dir1 --exclude=/dir2 --exclude=/dir3/dir4
$ echo !!:3-$
echo --exclude=/dir1 --exclude=/dir2 --exclude=/dir3/dir4
--exclude=/dir1 --exclude=/dir2 --exclude=/dir3/dir4

Здесь мы используем bash расширение истории:

  • !!!! ссылайтесь на последнюю команду
  • 3-$ ссылайтесь на третий параметр к последнему

Вы должны включить в вашем скрипте функции расширения истории bash, которые отключены в неинтерактивной оболочке:

set -o history
set -o histexpand
4
27.01.2020, 21:12

Я бы добавил это в качестве комментария, за исключением того, что я не придумал, как хорошо форматировать комментарии!

В любом случае, я думаю, что вы на 90% там. Попробуйте:-

EFLAGS="--exclude=/dir1 --exclude=/dir2"
du -sh / $EFLAGS
tar cvf archive / $EFLAGS

Кавычки нужны в первой строке, так как в ней есть пробелы.

Никаких кавычек при использовании переменной, чтобы она разбивала аргументы на пробелы.

Если в именах исключенных каталогов есть пробелы, то вам нужно их экранировать.

1
27.01.2020, 21:12

В Бэше очень чистым способом является использование массивов:

myflags=( --exclude=/dir1 --exclude=/dir2 --exclude=/dir3/dir4 )
tar cvf archive / "${myflags[@]}"

Они могут обрабатывать пробелы и любые другие смешные символы:

myflags=( "--exclude=/a dir/with spaces" $'--exclude=/a dir/with\nnewlines' )
tar cvf archive / "${myflags[@]}"

Их тоже можно подделать, например, вы хотите исключить все подкаталоги каталога /этой-один, которые содержат букву g:

exclude_dirs=( /this/one/*g* )
myflags=( "${exclude_dirs[@]/#/--exclude=}" )
tar cvf archive / "${myflags[@]}"
2
27.01.2020, 21:12

Теги

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