скрипт изменения даты

Пройдитесь по именам файлов с помощью цикла for -и добавьте их к шаблону поиска, скопируйте с помощью дескриптора exec:

for i in $(<names.list)
do
    find. -path \*spades/filtered/"$i" -type f -exec cp -t "$HOME/destination/" {} \;;
done

Изменить:Благодаря ответу Ракеша Шармы `, заменив тело цикла на:

find. -mindepth 5 -maxdepth 5 -path "*/spades/filtered/$i" -type f -exec cp -t "$HOME/destination/" {} +;

ускоряет процесс.

0
30.09.2019, 17:17
2 ответа

Если предположить, что мое предположение в комментарии выше верно:

# "now" == first day of this month: format YYYYmmdd
now=$( date "+%Y%m01" )

# "after" == last day of previous month: format YYYY-mm-dd
after=$( date -d "$now - 1 day" "+%Y-%m-%d" )

echo "now=$now"         # now=20190901
echo "after=$after"     # after=2019-08-31
1
28.04.2021, 23:28

Это должно помочь:

#!/bin/sh

file=hyb.txt

nowfile=${1:-20180301}
afterfile="${2:-"$(date -d "$nowfile -1 day" +"%Y-%m-%d")"}"

now=$(date +%Y%m01) 
after=$(date -d "$now -1 days" +%Y-%m-%d)

echo sed -i 's/'"$nowfile"'/'"$now"'/g' "$file"; 
echo sed -i 's/'"$afterfile"'/'"$after"'/g' "$file";

Сценарию нужны аргументы.

Аргумент 1 — это значение nowвнутри файла, которое необходимо изменить. Если аргумент 1 не указан, по умолчанию используется 20180301.

Аргумент 2 — это значение after, которое нужно изменить внутри файла(afterfile). Если не указано, значение вычисляется из значения nowвнутри файла (nowfile).

Вызовите сценарий как ./script 20180301 2018-02-28, чтобы он действовал как исходный сценарий.

Вызовите./script 20180901(без второго аргумента ), чтобы сценарий вычислил новое afterfileзначение (, в результате чего20180831).

Если рассчитанные значения работают так, как вам нужно, удалите два echoперед sed, чтобы скрипт обработал файл.

0
28.04.2021, 23:28

Теги

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