Unix嵌套循环。一个循环到untar,然后另一个循环检查目录中的每个文件

Unix嵌套循环。一个循环到untar,然后另一个循环检查目录中的每个文件,unix,shell,nested-loops,Unix,Shell,Nested Loops,我试图循环加载tar文件,然后将提取的文件移动到一个新文件夹中,检查并删除它们,然后再移动到下一个tar 代码如下: for i in * do tar -zxvf $i mv *TTF* encoded cd encoded for j in * do echo $j done rm -f *TTF* cd .. done 当它到达嵌套循环时,它会询问是否要显示所有x可能性。显然出了点问题。有什么想法吗?你是不是在文本编辑器中写的,然后尝试粘贴到终

我试图循环加载tar文件,然后将提取的文件移动到一个新文件夹中,检查并删除它们,然后再移动到下一个tar

代码如下:

for i in *
do
  tar -zxvf $i 
  mv *TTF* encoded
  cd encoded
  for j in *
  do
    echo $j
  done

  rm -f *TTF*
  cd ..
done

当它到达嵌套循环时,它会询问是否要显示所有x可能性。显然出了点问题。有什么想法吗?

你是不是在文本编辑器中写的,然后尝试粘贴到终端上?您是否使用制表符缩进行?如果是这样,请尝试将选项卡更改为空格,或者将文件另存为shell脚本,然后运行它


(tab键调用completion,如果有大量匹配的completion,则会显示“显示所有x可能性”消息。)

您是在文本编辑器中编写的,然后尝试将其粘贴到终端中吗?您是否使用制表符缩进行?如果是这样,请尝试将选项卡更改为空格,或者将文件另存为shell脚本,然后运行它


(tab键调用completion,如果有大量匹配的completion,则显示“display all x Probabilities”(显示所有x可能性)消息。)

在子shell中运行“cd”命令及其后续操作,这意味着您不必执行“
cd..
”。另外,最好是直接在子目录中提取每个tar文件

for i in *.tar.gz
do
  mkdir encoded
  (
  cd encoded
  tar -zxvf ../$i 
  for j in *
  do
    echo $j
  done
  )
  rm -fr encoded
done

这仅假设tar文件的路径中不包含任何带有“
”的名称,这是非常罕见的。

在子shell中运行“cd”命令及其后续操作,这意味着您不必执行“
cd..
”。另外,最好是直接在子目录中提取每个tar文件

for i in *.tar.gz
do
  mkdir encoded
  (
  cd encoded
  tar -zxvf ../$i 
  for j in *
  do
    echo $j
  done
  )
  rm -fr encoded
done

这仅假设tar文件的路径中不包含任何带有“
”的名称,这是非常罕见的。

echo“输入术语号”读取i的计数(seq 1$count)do t=
expr$i-1
for j in$(seq$t-10)do echo-n”done j=
expr$count+1
x=
expr$j-$i
$(seq$1$x)do echo-n“*”done echo“

echo”输入术语“i的读取计数(seq$1$count)do t=
expr$i-1
j的读取计数(seq$t-10)do echo-n”done j=
expr$count+1
x=
expr$i
k的读取计数(seq$1$x)do echo-n*“done echo”

我建议在启用bash调试的情况下运行脚本,即
bash-x myscript.sh
。这将帮助您跟踪导致您看到的输出的命令。此脚本有一点肯定是错误的:因为
encoded
在当前目录中(至少在循环一之后),外部循环将尝试在其上执行
tar xzvf
。@larsmans:如果编码目录仅在第一次迭代中出现,则不会有问题;
*
在第一次迭代开始之前进行评估。由于目录不是在显示的循环中创建的,因此存在问题。可能是“*”应该是r替换为“
”$@”
”。@Leffler,你是对的,我的错误。也可能是
$i
$j
必须被双引号引用。我建议在运行bash调试的情况下运行脚本,即
bash-x myscript.sh
。这将帮助你跟踪哪个命令导致你看到的输出。这个脚本肯定有一点错误pt:因为
编码的
在当前目录中(至少在循环1之后),外部循环将尝试在其上执行
tar xzvf
。@larsmans:如果编码目录仅在第一次迭代中出现,则不会有问题;
*
在第一次迭代开始之前进行评估。由于目录不是在显示的循环中创建的,因此存在问题。可能是“*”应该是r替换为“
”$@“
”。@Leffler,你是对的,我错了。也可能是
$i
$j
必须被双引号引用。