将有一个目录,它将有任何数字文件夹,可能是文件,我只需要选择一个随机文件夹,需要处理它(移动文件夹等)。我需要逐个处理文件夹。如果有任何文件,需要忽略。
我厌倦了能够获取文件夹名称的下面的代码但是,似乎有一些隐藏的字符或某些东西没有给出正确的输出。
PROCESSING_FOLDER_NAME= ls -l /ecom/bin/catalogUpload/input/TNF-EU/ | grep '^d' | cut -d ' ' -f23 | head -1
#PROCESSING_FOLDER_NAME= echo $PROCESSING_FOLDER_NAME | tr -d '\n\r'
#PROCESSING_FOLDER_NAME=${PROCESSING_FOLDER_NAME%$'\n'}
#echo "PROCESSING_FOLDER_NAME is/$PROCESSING_FOLDER_NAME "
echo "/ecom/bin/catalogUpload/input/TNF-EU/$PROCESSING_FOLDER_NAME/"
输出
Thanks_giving_Dec_08
/ecom/bin/catalogUpload/input/TNF-EU//
我期待输出应该是/ ecom / bin / catalogUpload / input / TNF-EU / Thanks_giving_Dec_08 /
这是我的bash版本。
GNU bash, version 4.2.50(1)-release (powerpc-ibm-aix6.1.2.0)
我主要需要变量中的文件夹名称(不是完整路径),因为正在处理的文件夹名称需要用于电子邮件通知其他人等。
答案 0 :(得分:1)
要从文件夹列表中获取随机文件夹, 首先将文件夹列表放在一个数组中:
list=(/ecom/bin/catalogUpload/input/TNF-EU/*/)
接下来,使用shell的$RANDOM
变量获取随机索引,
以模块的大小为模:
((index = RANDOM % ${#list[@]}))
在所选索引处打印值:
echo "${list[index]}"
要获取没有完整路径的目录名称,可以使用basename
命令:
basename "${list[index]}"
至于原始剧本的错误:
name=$(cmd)
而不是name= cmd
ls
的输出,它不可靠*
结尾的/
等glob模式,如上例*/
中所述。