2017-09-26 165 views
1

最近我开始在Linux(新手)中使用shell脚本。我想知道在循环中从一个文件夹更改为另一个文件夹的命令或过程?我的意思是如何在执行循环内调用不同的文件夹?目前,我将所有文件夹重命名为1,2,3 ......并且在循环中使用这些文件夹。我知道这不是使用脚本的好方法。Bash shell脚本

set k=1 
while ($k <= 17) 

## initial path set 
    cd /home/naren/Documents/BASELINE_INSP/FreeSurfer/$k/RSFC 

每次“K”的更新,移动到不同的文件夹,因为我命名的所有文件夹,因为没有的。

回答

-1

为了编写代码,而不记数, 可以使用ls命令列出当前目录下的文件,或者使用ls [folder_name]列出文件夹中的文件, 为了分配结果文件中使用$操作
编辑:
因为ls有一些pitfalls@randomir提到它是更好地使用迭代如下:

for f in ./* do 
 
    //do something with $f 
 
done

+2

你应该**从不**做[那](http://mywiki.wooledge.org/BashPitfalls#for_i_in_.24.28ls_.2A.mp3.29)。 – randomir

+0

是啊你是对的,似乎正确的方式是这样的 'for file in somepath/*;做 [-e“$ file”] ||继续 一些命令 “$文件”,根据 [链接] done' (http://mywiki.wooledge.org/BashPitfalls#for_i_in_.24.28ls_.2A.mp3.29) – CaCo3

1
# 
# Start with ID equal to zero and increment 
# 
ID=0 

# 
# then use a say a while loop 
# 
while [ ${ID} -lt 5 ]; do 
    echo "my dir is /here/${ID}/there"; 
    ((ID++)); 
done 
+0

尽管此代码可能会解决问题,一个好的答案需要解释该代码如何/为什么有用。 – BDL

+0

我不会写这样的混合'bash'/POSIX代码。 'while'循环是POSIX中正确的方法,但是您必须使用'ID = $((ID + 1))''来增加变量。如果你可以使用'((...))',那么你也可以更容易地使用C风格的for循环。 – chepner

2

试试这个:

#!/bin/bash 
for ((i=1; i <= 17; i++)); do 
    #Changing folder inside the loop 
    cd "/home/naren/Documents/BASELINE_INSP/FreeSurfer/${i}/RSFC" 
    #Here you can execute something more if you want 
done 
1

我的意思是我如何可以调用执行循环内不同的文件夹?

最好,如果你想环路匹配特定模式的所有文件夹(不必包含数字),只需指定一个for循环模式:

for folder in /home/naren/Documents/BASELINE_INSP/FreeSurfer/*/RSFC 
do cd "$folder" 
    # do something there 
done 
+1

各地行情'$ folder'可能是一个好主意。 – cdarke