【发布时间】:2015-08-26 15:16:54
【问题描述】:
我有包含内容的文本文件 file1.txt
./home/a/a1/a1.1
./home/a/a1/a1.2
./home/a/a2/a2.1
./home/a/a2/a2.2
./home/a/a3
./home/a/a4
./home/b/b1
./home/b/b2
还有一个包含内容的文本文件 file2.txt:
./copy/a/a1/a1.1
./copy/a/a1/a1.2
./copy/a/a2/a2.1
./copy/a/a2/a2.2
./copy/a/a3
./copy/a/a4
./copy/b/b1
./copy/b/b2
我已经创建了脚本来复制所有的文本文件
./home/a/a1/a1.1 to ./copy/a/a1/a1.1
./home/a/a1/a1.2 to ./copy/a/a1/a1.2
........
....
对于其他行也是如此。
这是脚本:
file1='/home/superjaggu/Desktop/file1.txt'
file2='/home/superjaggu/Desktop/file2.txt'
while IFS= read -r lineA && IFS= read -r lineB <&3; do
cp *.txt $linA $lineB
done <$file1 3<$file2
但是它将file1.txt和file2.txt复制到目标目录而不是从源复制文本文件。
请帮忙。
【问题讨论】:
-
cp ${lineA}/*.txt ${lineB}
-
@MaheshKharvi 感谢命令以任何方式抑制不存在 txt 文件的 cp 消息 cp: cannot stat './home/a/a1/a1.2/*.txt': No such文件或目录
-
知道了:cp ${lineA}/*.txt ${lineB} 2>/dev/null
-
旁白:使用标准的、以换行符分隔的文本文件来存储 UNIX 文件名是不好的形式,因为 UNIX 文件名本身可以包含文字换行符。因此,可能存在无法以这种格式存储的文件名。 NUL 分隔的文件名流避免了这个问题。
-
cd ./home; find . -type f -name "*.txt" -print0 | cpio -0dump ../copy/.应该足够了...
标签: linux bash shell unix ubuntu