{name = "php7"; path = "${pkgs.php}/modules/libphp7.so";}
Мне нужно было добавить это в extraModules
.
Этот сценарий оболочки выполнит эту работу:
#!/bin/bash
old_filename=$1
IFS='-' read -r -a arr <<< $old_filename # read dash-separated substrings into the array 'arr'
tmpsub=${arr[7]%.csv.gz} # extract 7th substring, stripping out the file extension
for i in $(seq 6 -1 1) # shifts right the substrings
do # in the array by one
arr[$(($i+1))]=${arr[$i]} # position, starting by 1
done
arr[1]=$tmpsub # set the substring 1 to the value of the previous 7th substring
new_filename=$(printf -- "-%s" "${arr[@]}") # join the substrings into a dash separated string
new_filename=${new_filename:1}".csv.gz" # add the extension
mv $old_filename $new_filename # rename the file
Если вы назовете его, например, rename_csv.sh
, и сделаете его исполняемым с помощью chmod
, вы можете вызвать его, используя только исходное имя файла в качестве входных данных, как показано ниже:
./rename_csv.sh 234-2020-08-06-12-13-14-abc_up.csv.gz
Он не показывает никаких выходных данных, но переименовывает файл как следует.
Вы можете попробовать sed
для преобразования имени файла (синтаксис подразумевает GNUsed
):
Пример:
echo "234-2020-08-06-12-13-14-abc_up.csv" | sed -E 's/(.*)-([[:digit:]]{4}(-[[:digit:]]{2}){5})-([^.]+).csv/\1-\4-\2.csv/'
234-abc_up-2020-08-06-12-13-14.csv
Это будет искать
YYYY-MM-DD-hh-mm-ss
(, т. е. 4 цифры, а затем 5 раз «тире, за которыми следуют 2 цифры» ), сохраненные в «группе захвата» 2, а затем Он заменит этот шаблон на "группа захвата 1", "группа захвата 4", "группа захвата 2", а затем .csv
, что должно соответствовать вашим требованиям.
Если ваш sed
не понимает классы символов POSIX, замените [[:digit:]]
на [0-9]
.
Таким образом, сценарий оболочки может выглядеть так
#!/bin/bash
fname="$1"
newname="$(sed -E 's/(.*)-([[:digit:]]{4}(-[[:digit:]]{2}){5})-([^.]+).csv/\1-\4-\2.csv/' <<< "$fname")"
mv "$fname" "$newname"
Обязательно сначала протестируйте его, заменив строку mv
на
echo "Would now execute 'mv $fname $newname'"
Если вы не используете bash
, вам придется изменить замену команды -на
newname="$(echo "$fname" | sed -E etc.)"