我试图将* .txt的内容捕获到另一个目录中具有相同名称的另一个文件中。例如。 ../../*.txt
我试过了:
find . -type f -name "*.txt" -exec cat {} \; >> ../../*.txt
它的一些变化,但最终会出现模糊的重定向错误,或者根本没有任何错误。
我在这里缺少什么?
答案 0 :(得分:2)
*
不进行一对一映射。它将通过bash进行扩展,以表示../../
目录中的所有txt文件。这导致错误,因为现在您正在尝试重定向到多个文件。
使用for循环而不是查找可能更容易,因为您需要两次引用文件名。
for file in *.txt
do
if [ -f ./$file ] ; then
cat ./$file >> ../../$file
fi
done
答案 1 :(得分:0)
对于1个文件:
cat ./file1.txt >> ../../file1.txt
您的问题建议1个文件,但您的find
命令建议使用*.txt
类型的许多文件
要根据您的*.txt
命令执行find
类型的多个文件,请尝试:
find . -name "*.txt" -print0 | while read -d $'\0' filename
do
cat ./$filename >> ../../$filename
done
答案 2 :(得分:0)
将* .txt的内容捕获到另一个名称相同的文件
基本上你在这里复制文件。不是吗?
所以下面的东西应该适合你。
find . -type f -iname "*.txt" -exec cp bash -c 'cp "$1" ../../"$1"' _ {} \;