Пройдитесь по именам файлов с помощью цикла 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/" {} +;
ускоряет процесс.
Если предположить, что мое предположение в комментарии выше верно:
# "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
Это должно помочь:
#!/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, чтобы скрипт обработал файл.