У меня есть особый вопрос по написанию сценариев оболочки.
Простое создание сценариев для меня не проблема, но я новичок в этом деле и хочу создать простой файл базы данных.
Итак, что я хочу сделать, это:
- Search for filetypes (i.e. .nfo) <-- should be no problem :)
- read inside of each found file and use some strings inside
- these string of each file should be written in a new file. Each found file informations
должна быть одна строка в новом файле
Надеюсь, я хорошо объяснил свой «проект».
Теперь моя проблема заключается в том, чтобы понять, как я могу сказать сценарию, что он должен искать файлы, а затем использовать каждый из этих файлов для чтения в нем и использовать некоторую информацию в нем, чтобы записать это в новый файл.
Я объясню немного лучше.
Я ищу файлы, и это возвращает меня:
файл1.nfo
файл2.nfo
файл3.nfo
Хорошо, теперь в каждом из этих файлов мне нужна информация между двумя строками. то есть
file1.nfo:
<user>test1</user>
file2.nfo:
<user>test2</user>
поэтому в новом файле теперь должно быть:
file1.nfo:user1
file2.nfo:user2
OK so:
find -name *.nfo > /test/database.txt
распечатывает список файлов. и
sed -n '/<user*/,/<\/user>/p' file1.nfo
возвращает мне весь файл, а не только информацию между <user> и </user>
Я стараюсь идти шаг за шагом и много читаю, но это кажется очень трудным.
Что я делаю неправильно и как лучше всего составить список всех файлов и записать файлы и содержимое между двумя строками в файл?
ИЗМЕНИТЬ-НОВОЕ:
Хорошо, вот обновление для получения дополнительной информации. Теперь я многому научился и искал в Интернете свои проблемы. Я могу найти много информации, но я не знаю, как собрать ее вместе, чтобы я мог ее использовать.
Теперь работа с awk заключается в том, что я возвращаю имя файла и строку.
Вот теперь полная информация (я думал, что смогу продолжить сам с небольшой помощью, но я не могу :( )
Вот пример: /test/file1.nfo
<string1>STRING 1</string1>
<string2>STRING 2</string2>
<string3>STRING 3</string3>
<string4>STRING 4</string4>
<personal informations>
<hobby>Baseball</hobby>
<hobby>Baskeball</hobby>
</personal informations>
Вот пример /test/file2.nof
<string1>STRING 1</string1>
<string2>STRING 2</string2>
<string3>STRING 3</string3>
<string4>STRING 4</string4>
<personal informations>
<hobby>Soccer</hobby>
<hobby>Traveling</hobby>
</personal informations>
Файл, который я хочу создать, должен выглядеть так.
STRING 1:::/test/file1.nfo:::Date of file:::STRING 4:::STRING 3:::Baseball, Basketball:::STRING 2
STRING 1:::/test/file2.nfo:::Date of file:::STRING 4:::STRING 3:::Baseball, Basketball:::STRING 2
«Дата файла» должна быть датой создания файла. Чтобы я мог видеть, сколько лет файлу.
Итак, это то, что мне нужно, и это кажется непростым.
Большое спасибо.
ОШИБКА ОБНОВЛЕНИЯ -printf
find: unrecognized: -printf
Usage: find [PATH]... [OPTIONS] [ACTIONS]
Search for files and perform actions on them.
First failed action stops processing of current file.
Defaults: PATH is current directory, action is '-print'
-follow Follow symlinks
-xdev Don't descend directories on other filesystems
-maxdepth N Descend at most N levels. -maxdepth 0 applies
actions to command line arguments only
-mindepth N Don't act on first N levels
-depth Act on directory *after* traversing it
Actions:
( ACTIONS ) Group actions for -o / -a
! ACT Invert ACT's success/failure
ACT1 [-a] ACT2 If ACT1 fails, stop, else do ACT2
ACT1 -o ACT2 If ACT1 succeeds, stop, else do ACT2
Note: -a has higher priority than -o
-name PATTERN Match file name (w/o directory name) to PATTERN
-iname PATTERN Case insensitive -name
-path PATTERN Match path to PATTERN
-ipath PATTERN Case insensitive -path
-regex PATTERN Match path to regex PATTERN
-type X File type is X (one of: f,d,l,b,c,...)
-perm MASK At least one mask bit (+MASK), all bits (-MASK),
or exactly MASK bits are set in file's mode
-mtime DAYS mtime is greater than (+N), less than (-N),
or exactly N days in the past
-mmin MINS mtime is greater than (+N), less than (-N),
or exactly N minutes in the past
-newer FILE mtime is more recent than FILE's
-inum N File has inode number N
-user NAME/ID File is owned by given user
-group NAME/ID File is owned by given group
-size N[bck] File size is N (c:bytes,k:kbytes,b:512 bytes(def.))
+/-N: file size is bigger/smaller than N
-links N Number of links is greater than (+N), less than (-N),
or exactly N
-prune If current file is directory, don't descend into it
If none of the following actions is specified, -print is assumed
-print Print file name
-print0 Print file name, NUL terminated
-exec CMD ARG ; Run CMD with all instances of {} replaced by
file name. Fails if CMD exits with nonzero
-delete Delete current file/directory. Turns on -depth option