将文件从多个文件夹移动到一个目标文件夹
亲爱的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
在同一个目录下不能有多个同名的文件。如果您打算最终连接所有文件,而不是一次完成所有文件?
例如,下面的命令将串联目录内的所有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
嗨肖恩!究竟!我想将它们连接在一起。我知道没有相同名称的文件可以保留在同一文件夹中,但它们是独立运行在每个文件夹中的算法的输出。我试过你建议我的代码,但它不起作用。它仅复制最终new_file.txt中的file.txt的内容。 – Elb 2012-07-18 13:16:27
这只是一个例子;你需要修改它以适应你的文件结构。如果您发布更具体的示例,我们可能会提供帮助。 – 2012-07-18 13:17:07
是肖恩,我正在解决的问题在我发布的问题中完全解释。我试图写一个循环如下:为我在文件夹*;做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
我认为这是不可能的。你的目标文件夹中有同名的文件,它们将被覆盖。你可以使用unix工具'find'来查找名为'file.txt'的所有文件,并用'mv'将它们移动到目标文件夹。但是你必须重命名文件。例如file1.txt,file2.txt ... – hofmeister 2012-07-18 12:54:54