bash从原始提取路径复制文件

时间:2015-07-10 12:57:06

标签: linux bash sed grep find

我需要将一组文件路径复制到其他位置:

find . -name '*.txt': 
/a/b/c/d/e/f/filea.txt
/a/b/c/d/e/g/h/fileb.txt
/a/b/c/d/e/k/l/filec.txt

我想将每个文件复制到包含e的路径,例如:

cp /a/b/c/d/e/f/filea.txt e/f/

e路径将始终存在。 我首先需要找到所有文件。 如何找到,从路径中提取 e 之后的所有内容并同时复制?

2 个答案:

答案 0 :(得分:1)

通过

管道find输出
sed 's|\(.*\)\(\*\*e\*\*.*/\)\(.*\)|cp \1\2\3 \2|' 

如果结果看起来没问题,请通过sh管道sed输出。如果**e**仅表示e,则模式为

 sed 's|\(.*\)\(e.*/\)\(.*\)|cp \1\2\3 \2|' 

答案 1 :(得分:0)

你可以使用这样的东西。如果生成的mkdir和cp命令看起来没问题,则可以在它们之前删除回显。

SOURCE = “/ A / B / C / d”
cd $ SOURCE
DESTINATION =“full / path / to / whatever”

$ p中的FILE(找到。-name'* .txt');做

DIR=$(dirname $FILE)  
# create the intermediate directories if they don't exist  

echo "mkdir -p $DESTINATION/$DIR"  

echo "cp $FILE $DESTINATION/$DIR"  

完成