Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 在ksh中,如何使用循环遍历目录列表并将其复制到cd?_Shell_Loops_Scripting_Ksh_Cd - Fatal编程技术网

Shell 在ksh中,如何使用循环遍历目录列表并将其复制到cd?

Shell 在ksh中,如何使用循环遍历目录列表并将其复制到cd?,shell,loops,scripting,ksh,cd,Shell,Loops,Scripting,Ksh,Cd,基本上,我有一个平面文件,其设置如下: /这是/is/a/log/directory | 30 /这/也/是/有/记录| 45 /这/记录/也| 60 我试图做的是提取这个平面文件的第一列,即目录路径,并检查其中是否有500多个日志文件。如果有,请删除除最新的500个文件以外的所有文件 我试着做这样的事情 #!/bin/ksh for each in "$(awk '{ print $1 }' flat_file)"; do cd "$each"; if [ "ls -l

基本上,我有一个平面文件,其设置如下:

/这是/is/a/log/directory | 30

/这/也/是/有/记录| 45

/这/记录/也| 60

我试图做的是提取这个平面文件的第一列,即目录路径,并检查其中是否有500多个日志文件。如果有,请删除除最新的500个文件以外的所有文件

我试着做这样的事情

#!/bin/ksh

for each in "$(awk '{ print $1 }' flat_file)"; do

    cd "$each";

    if [ "ls -l | wc -l >= 500" ]; then
        rm `ls -t | awk 'NR>500'`

    else
        :

    fi

done

然而,从我所读到的内容来看,我无法像我试图做的那样,在我的脚本中使用for循环,你可以在一个函数中执行它,在这一点上,我基本上只是制作了一个函数,并将代码复制到其中,当然它不起作用(不太熟悉shell脚本)。类似于Python的操作系统模块,我可以使用OS.listdir()并传入目录名,这将是完美的,但是我还没有找到一个简单的方法来实现这一点。

好的,你的思路是正确的,但是你会把查看代码的
csh
程序员与查看每个
程序员混淆。为什么不呢

 for dir in $( awk '{ print $1 }' flat_file ) ; do
      cd "$dir"
      if (( $(ls -l | wc -l) >= 500 )); then
            rm $( ls -t | awk 'NR>500' )
         fi
      cd -
 done
原始代码中有很多小东西。当您在其他时间使用cmd sub
$(cmd)
的首选形式时,为什么有时使用反勾号

“$(awk'{print$1}'文件)”
括在dbl引号中会将cmd子项的完整输出转换为一个长字符串,它不会找到名为“dir1 dir2 dir3…dirn”的目录,对吗

您不需要null(
否则
。您只需删除该代码块即可

ksh
支持
(..)
对内的数学运算(就像bash一样)

cd-
将带您返回上一个目录

学习使用shell调试/跟踪,
set-vx
。它将首先向您显示将要执行的内容(有时是一个非常大的循环结构),然后显示执行的每一行,前面是
+
,以及变量转换为其值的位置。您可能还希望使用
export PS4='$LINENO>“
,以便调试将显示正在执行的当前LINENO


啊,这非常有效。这是我在shell中写的第一件事,也是我在Python中唯一的其他经验,在Python中,您可以或多或少地交换“”和“”,因此仍然掌握了所有语法差异的窍门。就我的else语句而言,这只是一个占位符,因为我稍后会在其中添加一些内容。无论如何,非常感谢您提供的信息,可能比set-vx更能帮助我直观地看到正在发生的事情,这将在将来帮助我找出我做错了什么。