2011-10-30 4 views
2

Мне нужен скрипт для копирования на cron основе списка файлов. Файлы, выбранные по шаблону name/datetime, и имя файла назначения должны быть добавлены такими данными, как ddmmyyy. Это не проблема с копиями файлов или каталога, но проблема с изменением имени каждого файла в соответствии с его данными. Может быть, существует какое-то решение с открытым исходным кодом? Спасибо.Linux bash script для копирования файлов

ответ

4

Вы не предоставили мне достаточно информации, чтобы дать вам реальный рабочий код; но вы можете сделать что-то вроде этого:

file=dated_log.log 
ddmmyyyy=$(read -r < "$file" ; echo "${REPLY:1:8}") 
cp "$file" "$file.$ddmmyyyy" 

выше скопирует dated_log.log в data_log.log.30102011, при условии, что в первой строке dated_log.log начинается с 30102011.

Bash Reference Manual, надеюсь, поможет вам отрегулировать вышеуказанное в соответствии с вашими потребностями.

+0

Вместо 'ddmmyyyy = $ (read -r <" $ file "; echo" $ {REPLY: 1: 8} ")' вы могли бы читать -r -n 8 ddmmyyyy <"$ file" '. –

+0

@gniourf_gniourf: Да, хорошая точка. Но я думаю, что мой ответ лучше, потому что я скорее сомневаюсь, что формат файла OP * на самом деле * начинается с точных восьми правильных символов, и я думаю, что код, который я опубликовал, скорее всего, будет более легко изменен в любой форме необходимо ОП. (Предположим, что OP действительно нуждается в символах с 30 по 37. Как бы вы отредактировали 'read -r -n 8 ddmmyyy' для их получения?) – ruakh

+1

для символов с 30 по 37:' read -r -n 37 ddmmyyyy <"$ file" ; ddmmyyyy = $ {ddmmyyyy: 30} 'будет делать. Или даже прямо: 'read -r ddmmyyyy <" $ file "; DDMMYYYY = $ {DDMMYYYY: 30: 8} '. Или 'read -r ddmmyyyy; printf -v ddmmyyyy "% .8s" "$ {ddmmyyyy: 30}" или ... цель состоит в том, чтобы избежать подоболочки (я лично нахожу '$ (... echo)' довольно плохого стиля. ':) '. –

Смежные вопросы