2017-09-26 186 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