2012-07-18 229 views
0

親愛的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

回答

2

在同一個目錄下不能有多個同名的文件。如果您打算最終連接所有文件,而不是一次完成所有文件?

例如,下面的命令將串聯目錄內的所有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

2

他們不能都在一個目錄具有相同的名稱

我會做一個查找,然後一隻貓到一個文件

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

這需要照顧的碰撞由重名的重命名爲預編號的名稱。該功能不是嚴格需要的。

這種方法可能會失敗的空間或製表符,或更糟糕的文件名。 (但是將空格和製表符放入名稱的人應該會失去......)

#!/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 
相關問題