2014-01-06 6 views
0

У меня есть три файла в папке/folder/files/$ SET_DATE /, но может иметь гораздо больше в зависимости от даты.Bash-скрипт. создайте .info.file.prt, если file.prt существует.

Ben.prt 
.info.Ben.prt 
Jim.prt 
John.prt 

Я хотел бы создать .info. *. PRT файл для каждого .prt файла в папке, но если она уже существует, я не хочу, чтобы создать два.

Ll-lart тогда оставил бы меня со следующим.

Сервер бен 10:30 < ~> LL-LART

.info.Ben.prt 
.info.Jim.prt 
.info.John.prt 
Ben.prt 
Jim.prt 
John.prt 

Значения в .info. * Foles будет подсчет символов в .prt файлов.

поэтому у меня есть следующее.

SET_DATE= cat /tmp/date.txt 

FILES="/folder/folder/folder/$DP_DATE/.info.*" 
FILESF="/folder/folder/folder/$DP_DATE/" 
FILESP="*.prt" 

if [ ! -e $FILESF".info."$FILESP ]; then 
echo 0 >> $FILESF.info.$FILESP 
fi 

Обнадеживает, что сейчас трудно это сделать.

Любой удар в правильном направлении был бы очень полезен.

ответ

1
for file in *.prt 
do 
    [ -f ".info.$file" ] || wc -c < "$file" > ".info.$file" 
done 

Для каждого имени файла .prt не начиная с . точкой, если файл, соответствующий .info не существует, создайте его с количеством символов, найденных в файле.

+0

На самом деле это не будет работать из внешнего каталога, знаете ли вы, как я мог запускать его из другой папки для запуска файлов в этой папке? –

+0

Простейшим способом было бы передать имя каталога, в котором вы хотите работать, в качестве аргумента, и иметь каталог изменений сценария в этом месте. Первая строка, чуть выше цикла 'for', может быть' cd $ {1: - "."} || exit 1', что означает изменение каталога, указанного первым аргументом, или текущего каталога. Это позволяет избежать необходимости анализировать имена файлов отдельно от путей. Другой альтернативой является определение имен файлов для проверки в качестве аргументов командной строки. Выполнение этого требует, однако, разбить имена на каталог (путь) и имя файла. Возможность, но смутно. –

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