我需要根据第一个字符从列表中复制文件。下面如果你看到我在列表文件中有三行,我需要将以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
答案 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内置字符串操作来修剪最后/
之后的文件名部分。