将一个文件放入另一个目录中的同一命名文件中

时间:2016-07-07 15:10:03

标签: bash unix find cat

我试图将* .txt的内容捕获到另一个目录中具有相同名称的另一个文件中。例如。 ../../*.txt

我试过了:

find . -type f -name "*.txt" -exec cat {} \; >> ../../*.txt

它的一些变化,但最终会出现模糊的重定向错误,或者根本没有任何错误。

我在这里缺少什么?

3 个答案:

答案 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"' _ {} \;