在最终的forwardslash之后重命名目录的最后部分

时间:2015-06-05 16:41:03

标签: linux

我有一个文本文件中的目录列表,我正在循环。我只想将目录的最后一部分重命名为标准化名称(这是最终转发之后目录的一部分)。有没有一种简单的方法来识别文件名的最后部分并在循环中重命名?

例如,目录是......

/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

我无法找到一种方法来做到这一点,尽管它应该很简单。对不起,这里有个新手。

2 个答案:

答案 0 :(得分:0)

我写了一个小脚本,可以帮你完成工作。

它将读取输入文件的内容,删除最后一个斜杠+斜杠符号后的所有内容,并在末尾追加/ rs,然后将更改写入新文件(称为output.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

在控制台中输入./script.sh input.txt来运行它。

注意:这是一种方法,它可能适合您当前的特定问题。它不会更新输入文件。相反,它使用新内容创建一个新文件(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"