将文件从多个文件夹移动到一个目标文件夹

问题描述:

亲爱的Unix用户我有例如6个文件夹,并在每个文件夹中有一个名为file.txt的文件。该文件的名称在我拥有的所有文件夹中完全相同。我想将所有名为file.txt的文件从6个文件夹中的每一个移动到一个通用文件夹中,该文件夹将包含所有文件,因为我最终想要连接这些文件。如何做到这一点?将文件从多个文件夹移动到一个目标文件夹

输入:
的folder1:file.txt的,文件夹2:file.txt的,folder3:file.txt的

输出: final_folder:file.txt的,file.txt的,file.txt的

由于

Eleonora

+0

我认为这是不可能的。你的目标文件夹中有同名的文件,它们将被覆盖。你可以使用unix工具'find'来查找名为'file.txt'的所有文件,并用'mv'将它们移动到目标文件夹。但是你必须重命名文件。例如file1.txt,file2.txt ... – hofmeister 2012-07-18 12:54:54

在同一个目录下不能有多个同名的文件。如果您打算最终连接所有文件,而不是一次完成所有文件?

例如,下面的命令将串联目录内的所有file.txt文件有与folder开头的名称和输出写入到new_file.txt:如果要包括多级子目录中的文件

cat folder*/file.txt > new_file.txt 

,你可以考虑使用find。 以下将在当前目录(和所有子目录)内递归搜索file.txt,并将其内容连接到new_file.txt

find . -name file.txt -exec cat {} \; > new_file.txt 
+0

嗨肖恩!究竟!我想将它们连接在一起。我知道没有相同名称的文件可以保留在同一文件夹中,但它们是独立运行在每个文件夹中的算法的输出。我试过你建议我的代码,但它不起作用。它仅复制最终new_file.txt中的file.txt的内容。 – Elb 2012-07-18 13:16:27

+0

这只是一个例子;你需要修改它以适应你的文件结构。如果您发布更具体的示例,我们可能会提供帮助。 – 2012-07-18 13:17:07

+0

是肖恩,我正在解决的问题在我发布的问题中完全解释。我试图写一个循环如下:为我在文件夹*;做cat file.txt> new_file.txt $ i;完成。它不工作.. – Elb 2012-07-18 14:01:03

他们不能都在一个目录具有相同的名称

我会做一个查找,然后一只猫到一个文件

cat `find .name 'file' -print` path/newFile 

这需要照顾的碰撞由重名的重命名为预编号的名称。该功能不是严格需要的。

这种方法可能会失败的空间或制表符,或更糟糕的文件名。 (但是将空格和制表符放入名称的人应该会失去......)

#!/bin/sh 

DIRS="dir1 dir2 dir3 dir4" 
TARGET=$HOME/txt 

move_one() 
{ 
    p=$1   # Full pathname 
    t=$2   # Target directory 
    i=$3   # Inode number from sourcefile 
    d=`dirname $p` 
    b=`basename $p` 
    #echo "p=$p" 
    #echo "d=$d" # the path-prefix from the source file 
    #echo "b=$b" # The name part of the source file 
    #echo "t=$t" 
    #echo "i=$i" 
# After checking, remove the echo below for more fun 
    echo mv -i $p $t/$i$b 
} 
             # inodenumber+name 
find $DIRS -name \*txt -type f -ls | awk '{print $1," ",$11}' | (
     while read i p; do 
     # echo "i=$i" 
     # echo "p=$p" 
     move_one $p $TARGET $i 
     done 
     ) 
#eof