2015-06-05 79 views
1

我有一個文本文件中的目錄列表,我正在循環。我只是想將目錄的最後部分重命名爲標準化名稱(這是最後一個前向符之後的目錄部分)。是否有一種簡單的方法來識別文件名的最後部分並將其重命名爲循環?重命名目錄的最後一部分跟在最後一個正斜槓

例如,目錄是...

/data/images/projects/MM/1/scans/16/7__ep2d_fid_basic_bold_293_Resting_State 
/data/images/projects/MM/1/scans/20/7__ep2d_fid_basic_bold_293_Resting_State 
/data/images/projects/MM/1/scans/03/8 

我想改變他們......

/data/images/projects/MM/1/scans/16/rs 
/data/images/projects/MM/1/scans/20/rs 
/data/images/projects/MM/1/scans/03/rs 

我不能想出一個辦法做到這一點,儘管它應該很簡單。對不起,這裏有個新手。

回答

0

我寫了一個小腳本,將爲你做這項工作。

它將讀取輸入文件的內容,刪除最後一個斜槓+斜線符號後的所有內容,並在末尾添加/ rs,然後將更改寫入新文件(稱爲output.txt)。

在控制檯輸入./script.sh input.txt創建script.sh和chmod + X,並添加以下代碼行,

#!/bin/bash 
# Usage: ./script.sh input.txt, where input.txt is your input file with the 
# raw data you want to change. 

while IFS='' read -r line 
do 
    name=$line 
    echo "Before: $name" 
    name=`echo $name | awk -F '/' '{ for(i=1; i<=8; i++) {print $i} }' | tr '\n' '/'|sed 's/.$//'` 
    echo "$name/rs" >> output.txt 
done < "$1" 

# EOF 

運行它。

注意:這是一種做法,它可能適合您當前的特定問題。它不更新輸入文件。而是使用新內容創建一個新文件(output.txt)。

+1

感謝您的幫助。這似乎奏效了。雖然我不知道它會如此複雜!感謝您的幫助。 –

0
while IFS='' read -r line 
    do 
     name=$line 
     echo "Before: $name" 
     name=`echo $name | awk -F '/' '{ for(i=1; i<=10; i++) {print $i} }' | tr '\n' '/'|sed 's/.$//'` 
     echo "$name/rsfMRI" > /sdata/images/projects/ASD_MM/1/datafiles/output.txt 
     for y in $(cat /sdata/images/projects/ASD_MM/1/datafiles/output.txt); do 
     mv $line $y 
     done 
    done < "$1" 
+1

我對上面的腳本做了一些更改,直接更改文件名,因爲上面的腳本只是插入到文本文件中(不知道我是否做錯了)。非常感謝您的幫助mattias。 –

相關問題