如何从目录中获取linux bash中的文件夹名称

时间:2017-12-10 06:03:21

标签: linux bash directory

将有一个目录,它将有任何数字文件夹,可能是文件,我只需要选择一个随机文件夹,需要处理它(移动文件夹等)。我需要逐个处理文件夹。如果有任何文件,需要忽略。

我厌倦了能够获取文件夹名称的下面的代码但是,似乎有一些隐藏的字符或某些东西没有给出正确的输出。

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)

我主要需要变量中的文件夹名称(不是完整路径),因为正在处理的文件夹名称需要用于电子邮件通知其他人等。

1 个答案:

答案 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模式,如上例*/中所述。