免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1978 | 回复: 8

[文件目录] 请教获取目录下所有文件夹的问题 [复制链接]

论坛徽章:
0
发表于 2017-07-31 10:26 |显示全部楼层
我现在想将某个目录下所有文件夹的名称保存成一个数组进行操作。代码如下:
for dir in $(ls -lt); do
        if [[ -d ${dir} ]]; then
                db_folder_list=("${db_folder_list[@]}" "${dir}")
        fi
done

这样是可以的。但是如果我将第一行换成 for dir in $(ls ./folder -lt); do就获取不到了。
请问下是为什么啊?是不是只能在目录内获取。不能在ls里传入指导目录的文件夹?
但是我用ls ./folder -lt和进入到目录内用 ls -lt是一样的啊?
请大神指教下。谢谢了

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
发表于 2017-07-31 10:55 |显示全部楼层
回复 1# hyzhj2156

pwd不同

论坛徽章:
0
发表于 2017-07-31 11:15 |显示全部楼层
jason680 发表于 2017-07-31 10:55
回复 1# hyzhj2156

pwd不同

那请问要如何解决呢?只能先cd到对应目录在执行了吗?

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
发表于 2017-07-31 11:31 |显示全部楼层
回复 3# hyzhj2156

$ pwd  
/tmp

$ ls xfile -lt
-rw-rw-r-- 1 jason jason 0 Jul 31 11:26 xfile

$ ls xfolder -ld
drwxrwxr-x 2 jason jason 4096 Jul 31 11:27 xfolder

$ ls xfolder -lt
total 0
-rw-rw-r-- 1 jason jason 0 Jul 31 11:27 x1
-rw-rw-r-- 1 jason jason 0 Jul 31 11:27 x2

$ ls x1 -lt
ls: cannot access x1: No such file or directory

$ ls xfolder/x1 -lt
-rw-rw-r-- 1 jason jason 0 Jul 31 11:27 xfolder/x1


论坛徽章:
0
发表于 2017-07-31 16:38 |显示全部楼层
jason680 发表于 2017-07-31 11:31
回复 3# hyzhj2156

$ pwd  

你好。上述代码我测试了。确实是如上情况。
------------------------------------------------------------------
但现在我的情况是 tmp文件夹下有x文件夹,x文件夹内有x1,x2文件夹
我如果在tmp下执行
for dir in $(ls x -lt); do
  if [[ -d ${dir} ]]; then
是无法取出x1,x2的.
只能cd x在
for dir in $(ls -lt); do
  if [[ -d ${dir} ]]; then

才能取出x1,x2。
我只是不知道为什么会有这个区别。

论坛徽章:
0
发表于 2017-07-31 16:42 |显示全部楼层
回复 4# jason680

我也打印了两个的区别:cd x
for dir in $(ls -lt); do

for dir in $(ls x -lt); do
两个打印出来的结果也是完全一样的。

所以才很疑惑为什么一个可以用-d判断,一个不行

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
发表于 2017-07-31 17:47 |显示全部楼层
回复 6# hyzhj2156

1. cd command

cd x
for dir in $(ls -lt); do
  if [[ -d ${dir} ]]; then
     ...


2. include path

for dir in $(ls x -lt); do
  if [[ -d x/${dir} ]]; then
    ...

论坛徽章:
0
发表于 2017-07-31 18:00 |显示全部楼层
jason680 发表于 2017-07-31 17:47
回复 6# hyzhj2156

1. cd command

诶。原来是这个问题。。。非常感谢了

论坛徽章:
0
发表于 2017-08-01 14:10 |显示全部楼层
本帖最后由 本友会机友会摄友会 于 2017-08-01 14:11 编辑

powershell貌似不用这么麻烦
  1. $不含子目录_数组1 = Get-ChildItem -path  /tmp  -Directory
  2. $含所有子目录_数组2 = Get-ChildItem -path  /tmp  -Directory -Recurse
复制代码


http://bbs.chinaunix.net/thread-4264293-1-2.html

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP