Это нормально, чтобы извлечь приложение узла в
/ opt / mynoDeaPlation
? Или есть лучшее место?Это больше вопрос мнения, но я считаю, что ты в порядке. Стандарт для такого рода вещь - стандарт стандарт файловой системы стандарта , которая имеет более конкретных требований для
/ opt
, но это ваши пакеты для ваших систем так .. [Где я должен положить сценарий для запуска приложения? Я почти уверен
/ usr / local / bin
- это не правильное место, поскольку скрипт не является «bin».Если вы посмотрите на содержание
/ USR / BIN
, вы увидите, чтокаталоги
Ciredies содержат много скриптов; Точка... / bin
каталоги - только для содержения исполняемых команд, независимо от их деталей реализации. Таким образом, хранение скрипта в/ usr / local / bin
, чтобы ваше приложение было проще запустить, это нормально.Есть ли лучший способ сделать все это? Может быть, не использует сценарий вообще?
Вы сможете на самом деле сделать исполняемый файл вашего узла напрямую, со следующей линией Shebang добавлена в верхней части:
#!/usr/bin/env node
(см. https://stackoverflow.com/questions/24253027 / Node-and-Shebang-Help-Executing-VIA-Command-Line для получения подробной информации). Тогда вы можете переименовать вашу
app.js
, чтобы простоприложение
и у пользователях работает пользователи напрямую ... (Это предполагает, что он может работать с рабочим каталогом, отличным от/ opt / MynoDeaPlation
.)Если вы заинтересованы в приложениях уплотнения узла как
.deb
.deb , посмотритеNPM2DEB
, он может пригодиться.
Это неожиданный ответ:
for dir in $(ls ); do echo " $dir - this is the directory"; for csv in $(ls $dir/*csv); do cat $csv|sed -e "s/\(.*\)/$dir, \1/g"; done; done
Затем вы можете добавить параметры для указания имен файлов, например
for myfile in EA_sing EA_ska EA-tat; do for csv in $(ls $dir/$myfile*)...
, а затем перенаправьте их в файл по вашему выбору, например
do cat $csv|sed -e "s/\(.*\)/$dir, \1/g" >> $(echo "$myfile_complete.csv")
, который затем может быть объединен в что-то вроде этого:
for dir in aa bb cc dd; do for file in EA_sing EA_ska EA_tat; do for myfile in $(ls $dir/$file*);do echo "parsing $myfile"; cat $myfile | sed -e "s/\(.*\)/$dir,\1/g" >> $(echo "$file\_combined.csv"); done; done; done
Или более конкретно:
for dir in $(ls -d */); do for file in $(ls $dir*csv); do echo "this is my file $file"; cat $file|sed -e "s|\(.*\)|$(echo $dir|sed -e 's/\///g'), \1|g";done; done
Вам также следует рассмотреть возможность использования find
- еще одного очень полезного подхода - например, посмотрите на:
find . -name "*csv" -exec grep "" {} + | sed -e 's/:/,/g' -e 's/\.\///g'
Это очень похоже на вопросы, описанные здесь: Объединить имя файла внутри файла CSV для каждой строки для нескольких файлов CSV ?
См. также:
Использование всегда правильного имени файла
for t in $(find. -iname "*.csv" | awk -F_ '{print $2}' | sort | uniq); do
awk -v OFS="," 'split(FILENAME,f,/[_.]/){print $0,f[4]}' $(find. -iname "*$t*.csv" | sort) > EA_$t.csv
done