Я настоятельно рекомендую dateutils для подобных вещей. ( yum install dateutils
в Fedora 21+ или CentOS / RHEL 7 с EPEL.) Затем просто выполните:
dateround today sunday
Вы можете использовать «сегодня» или заменить фактическую дату:
$ dateround 2015-08-30 saturday
2015-09-05
Если вам нужно дата ввода должна быть в определенном формате, например 30-AUG-2015, вы можете использовать -i
или - input-format
, например:
$ dateround -i '%d-%b-%Y'30-AUG-2015 saturday
2015-09-05
Предполагая, что вы используете оболочку из семейства Bourne, вы можете удалить самую короткую начальную подстроку, соответствующую символу подчеркивания включительно, из переменной имени файла f
, используя${f#*_}
Пр.
$ touch Voice_XYZZ_1_1801.pdf Voice_XYZZ_1_1801.ndx Electon_MNOPQ_1_1801.pdf Electon_MNOPQ_1_1801.ndx
$ for f in Voice_* Electon_*; do echo "${f#*_}"; done
XYZZ_1_1801.ndx
XYZZ_1_1801.pdf
MNOPQ_1_1801.ndx
MNOPQ_1_1801.pdf
Вы можете использовать это вместе с командой mv
для переименования файлов, например.
for f in Voice_* Electon_*; do mv "$f" "${f#*_}"; done
Копирование в другое место может быть выполнено аналогичным образом с помощью команды cp
, например.
for f in Voice_* Electon_*; do cp "$f" "newdir/${f#*_}"; done
Это можно очень легко сделать из командной строки -, вызвав Perl one -лайнер:
ls *_* | perl -ne 'chomp($_); $orig = $_; $_ =~ s/[^_]*_//; rename $orig,$_;'
Вот объяснение кода:
Отправить все имена файлов, в имени которых есть '_', следующей команде
лс_|
Для каждой из передаваемых строк выполните команду
перл -пе
Удалить новую строку из имени файла (, оставшуюся после выполнения команды 'ls')
жевать ($ _);
Удалите первую часть слова, выполняя поиск, пока не найдете ' _'
$_=~с/[^]*//;
Переименуйте файл
переименовать $orig,$ _;