- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个 samba 目录共享(~1500)示例:101284_2012110634 Sachine 130 AB i HeisMakeBoravia(橄榄色)
202373_2012110640 Snowchine 7 AB i 法兰德斯
300738_2012110658_Machine VP 7 AB i 重命名 v 500185
我正在编写一个脚本来解析目录并从目录名称中获取一些数据(序列号、名称、注释),并枚举一些文件,特别是列表中目录的子目录(始终相同)。我通过 ls > results.txt
生成了目录列表 我通过 parse.sh results.txt
我完成了脚本的前半部分,它从目录名称中获取我需要的数据(省略了一些行,因为它们不相关)并且它有效。我对脚本的第二部分有问题,它首先查找子目录是否存在,然后查找 file 类型的文件并获取它们的名称和 md5 哈希值。如果在自己没有空格的目录中运行,第二部分将独立工作。
#!/bin/bash
# manually set working directory /sample or /rlisti must combine with parse.sh sample.txt or results.txt
WORKING_DIR='/sample'
# read from input file which is generated from ls dir > results.txt
# usage ./parse.sh results.txt
while IFS= read line || [[ -n $line ]]; do
# some tests which find variables from $line
MACHINE_SN=$(echo "$line" | sed 's/\([0-9][0-9][0-9][0-9][0-9][0-9]\).*/\1/')
BOARD_SN=$(echo "$line" | sed 's/^[0-9][0-9]*[ _]*\([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\).*/\1/')
if echo $line | grep -iqF air
then
AIR='1'
else
AIR='0'
fi
# tests to find and hash particular files in sub dirs
# test if there is directory Actual_Program_and_Database in current line.
if [ -d "$WORKING_DIR"/"$line"/Actual_Program_and_Database ]
then
# if dir exists set SW_DIR to 'Actual_Program_and_Database
SW_DIR='Actual_Program_and_Database'
# count files in dir, there should be 3 or 4, good to know if there are less or more as those are exceptions
NUM_FILES=$(ls "$WORKING_DIR"/"$line"/Actual_Program_and_Database | wc -l)
DB_COUNTER=1 # count Clarion DB files in dir
# test each file - this works on it's own when run in same directory with files
# but fails if lines contain spaces
for FILENAME in "$WORKING_DIR"/"$line"/Actual_Program_and_Database/*
do
# bellow works when script is run from same directory
# FILENAME is just file without it's leading path - so I'm trying to merge it with line
FILENAME_PATH="$WORKING_DIR"/"$line"/Actual_Program_and_Database/"$FILENAME"
# files of type Clarion are DB, there is DB1 and DB2 if there is also DB3 that is exception
if file "$FILENAME" | grep -q Clarion
then
# Create variables with name DB_PATH1 DB_PATH2 etc
# eval works on it's own but breaks if paths contain spaces or ()&
eval 'DB_PATH'$DB_COUNTER="$FILENAME_PATH" # path to filename for use with md5sum
eval 'DB_NAME'$DB_COUNTER=$(basename "$FILENAME_PATH") # name of DBx file
eval 'DB_HASH'$DB_COUNTER=$(md5sum "$FILENAME_PATH" | awk '{ print $1 }') # create hash of DBx
((DB_COUNTER ++)) # increase DB counter
# files of type POSIX are SCRIPTs there should be only one
elif file "$FILENAME" | grep -q POSIX
then
SCRIPT_PATH=$FILENAME_PATH
SCRIPT_NAME=$(basename $FILENAME_PATH)
SCRIPT_HASH=$(md5sum $FILENAME_PATH | awk '{ print $1 }')
# files of type CRLF are LISTs there should be only one
elif file "$FILENAME" | grep -q CRLF
then
LIST_PATH=$FILENAME_PATH
LIST_NAME=$(basename $FILENAME_PATH)
LIST_HASH=$(md5sum $FILENAME_PATH | awk '{ print $1 }')
else
UNKNOWN_FILE='1'
fi
done
# if there isn't directory Actual_Program_and_Database in current line set dir to 0
# there are not enough exceptions to program for them
else
SW_DIR='0'
fi
# Print results (for now - will write SQL statements to populate database once script works)
echo 'serial='$SERIAL
echo 'machine sn = '$MACHINE_SN # Valmar machine SN
echo 'board sn = '$BOARD_SN # electronic board SN
echo 'NUM_FILES = '$NUM_FILES # number of files in directory
echo 'NUM_DBS = '$NUM_DBS # number of files in directory - not working
echo 'DB_COUNTER= '$DB_COUNTER
echo 'SCRIPT_NAME= '$SCRIPT_NAME
echo 'SCRIPT_HASH= '$SCRIPT_HASH
echo 'LIST_NAME= '$LIST_NAME
echo 'LIST_HASH= '$LIST_HASH
echo 'DB_NAME1= '$DB_NAME1
echo 'DB_HASH1= '$DB_HASH1
echo 'DB_NAME2= '$DB_NAME2
echo 'DB_HASH2= '$DB_HASH2
echo 'UNKNOWN_FILE='$UNKNOWN_FILE
# added sleep so I can stop script when it fails to see results
sleep 10
done < "$1"
我是否应该将 sed 添加到开始创建 LINE_ESCAPED ,这将转义行中的所有空格括号并在第二部分中使用它?或者我应该重写脚本以在共享上工作而不是在 results.txt 上工作,这甚至可以工作吗?
最佳答案
我的引用有一些错误,我正在附加路径。我之前使用eval是因为我需要db1= db2=并且我想使用eval来生成变量数字。我从 eval 切换到 array[counter],因为我避免了 eval,而 array 满足了我的需要。不了解数组 - 这是我的第一个更严肃的 bash 脚本。
我还修复了所有大写变量,并使用建议仅测试文件 $filename 一次。这是我现在可以使用的代码。谢谢大家的建议。
if [ -d "$working_dir"/"$line"/Actual_Program_and_Database ]
then
sw_dir='Actual_Program_and_Database'
num_files=$(ls "$working_dir"/"$line"/Actual_Program_and_Database | wc -l) #count files in dir
db_counter=0 # count Clarion DB files in dir
for filename in "$working_dir"/"$line"/Actual_Program_and_Database/*
do
file_type=$(file "$filename")
if [[ $file_type = *Clarion* ]]
then
db_path[$db_counter]=$filename
db_name[$db_counter]=$(basename "$filename")
db_hash[$db_counter]=$(md5sum "$filename" | awk '{ print $1 }')
((db_counter ++))
elif [[ $file_type = *POSIX* ]]
then
script_path=$filename
script_name=$(basename "$filename")
script_hash=$(md5sum "$filename" | awk '{ print $1 }')
elif [[ $file_type = *CRLF* ]]
then
list_path=$filename
list_name=$(basename "$filename")
list_hash=$(md5sum "$filename" | awk '{ print $1 }')
else
unknown_file='1'
fi
done
else
sw_dir='0'
fi
关于regex - 脚本在空格上失败,我应该编写 sed 来转义路径或更改脚本以在目录上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51290287/
SO亲爱的 friend 们: 2014 年 3 月 18 日。我正在处理一种情况,在使用 ng-repeat 时,数组内的元素(我从 Json 字符串中获取)更改了原始顺序。 需要明确的是,数组中的
有很多问题询问如何在 JavaScript 单击处理程序中更改 div 的类,例如,此处:Change Div style onclick .我理解得很好(只需更改 .className),并且它有效
我从access导入了一个数据库到mysql,但其中一个表的列名“股数”带有空格,但我尝试更改、替换甚至删除列名,但失败了。任何人都可以帮助解决这一问题 String UpdateQuary = "U
我正在做一个随机的学校元素。 目前,我有一个包含两个 CSS 的页面。一种用于正常 View ,一种用于残障人士 View 。 此页面还包括两个按钮,它们将更改使用的样式表。 function c
我需要使用 javascript 更改 HTML 元素中的文本,但我不知道该怎么做。 ¿有什么帮助吗? 我把它定义成这样: Text I want to change. 我正在尝试这样做: docum
我在它自己的文件 nav_bar.shtml 中有一个主导航栏,每个其他页面都包含该导航栏。这个菜单栏是一个 jQuery 菜单栏(ApyCom 是销售这些导航栏的公司的名称)。导航栏上的元素如何确定
我正在摆弄我的代码,并开始想知道这个变化是否来自: if(array[index] == 0) 对此: if(!array[index] != 0) 可能会影响任何代码,或者它只是做同样的事情而我不需
我一直在想办法调整控制台窗口的大小。这是我正在使用的函数的代码: #include #include #define WIDTH 70 #define HEIGHT 35 HANDLE wHnd;
我有很多情况会导致相同的消息框警报。 有没有比做几个 if 语句更简单/更好的解决方案? PRODUCTS BOX1 BOX2 BOX3
我有一个包含这些元素的 XELEMENT B Bob Petier 19310227 1 我想像这样转换前缀。 B Bob Pet
我使用 MySQL 5.6 遇到了这种情况: 此查询有效并返回预期结果: select * from some_table where a = 'b' and metadata->>"$.countr
我想知道是否有人知道可以检测 R 中日期列格式的任何中断的包或函数,即检测日期向量格式更改的位置,例如: 11/2/90 12/2/90 . . . 15/Feb/1990 16/Feb/1990 .
我希望能够在小部件显示后更改 GtkButton 的标签 char *ButtonStance == "Connect"; GtkWidget *EntryButton = gtk_button_ne
我正在使用 Altera DE2 FPGA 开发板并尝试使用 SD 卡端口和音频线路输出。我正在使用 VHDL 和 C 进行编程,但由于缺乏经验/知识,我在 C 部分遇到了困难。 目前,我可以从 SD
注意到这个链接后: http://www.newscientist.com/blogs/nstv/2010/12/best-videos-of-2010-progress-bar-illusion.h
我想知道在某些情况下,即使剧本任务已成功执行并且 ok=2,ansible 也会显示“changed=0”。使用 Rest API 和 uri 模块时会发生这种情况。我试图找到解释但没有成功。谁能告诉
这个问题已经有答案了: 已关闭12 年前。 Possible Duplicate: add buttons to push notification alert 是否可以在远程通知显示的警报框中指定有
当您的 TabBarController 中有超过 5 个 View Controller 时,系统会自动为您设置一个“更多” View 。是否可以更改此 View 中导航栏的颜色以匹配我正在使用的颜
如何更改.AndroidStudioBeta文件夹的位置,默认情况下,该文件夹位于Windows中的\ .. \ User \ .AndroidStudioBeta,而不会破坏任何内容? /编辑: 找
我目前正在尝试将更具功能性的编程风格应用于涉及低级(基于 LWJGL)GUI 开发的项目。显然,在这种情况下,需要携带很多状态,这在当前版本中是可变的。我的目标是最终拥有一个完全不可变的状态,以避免状
我是一名优秀的程序员,十分优秀!