如何根据第一个字符

时间:2015-05-27 15:33:48

标签: shell unix scripting

我需要根据第一个字符从列表中复制文件。下面如果你看到我在列表文件中有三行,我需要将以M和A开头的行复制到新位置,例如(destination / testfolder)以及文件夹结构。代码还必须支持空间。任何帮助将不胜感激。

cat /tmp/patchfiles.txt
M       Hyperion/Planning/AAAAA/Planning/HP-AAAAA/info plan/listing.xml
A       Hyperion/Planning/AAAAA/Planning/Import.xml
D       Hyperion/Planning/AAAAA/Planning/HP-AAAAA/Import.xml

1 个答案:

答案 0 :(得分:1)

一个简单的while read循环就足够了:

while read -r status file; do
    case $status in
        M|A)
            cp "$file" /path/to/destination
            ;;
    esac
done < /tmp/patchfiles.txt

这将从您的文件中读取每一行,将第一个字段存储在变量$status中,其余字段存储在$file中。如果$status为“M”或“A”,则将文件复制到目的地。

如果你的系统上有dirname,你可以很容易地创建目录结构:

dir="/path/to/destination/$(dirname "$file")"
mkdir -p "$dir" && cp "$file" "$dir"

否则,您可以像这样使用bash:

dir="/path/to/destination/${file%/*}"
mkdir -p "$dir" && cp "$file" "$dir"

这使用bash内置字符串操作来修剪最后/之后的文件名部分。