2012-03-22 43 views
1

我有一個文件夾大約有1000個文件,我想根據它們不相關的父文件夾對它們進行分組。移動/分組文件Unix

我做了ls- R > updated.txt以獲取文件夾和文件的原始設置。

updated. txt看起來是這樣的:

./Rhodococcus_RHA1: 
NC_008268.fna 
NC_008269.fna 
NC_008270.fna 
NC_008271.fna 

./Rhodoferax_ferrireducens_T118: 
NC_007901.fna 
NC_007908.fna 

./Rhodopseudomonas_palustris_BisA53: 
NC_008435.fna 

./Rhodopseudomonas_palustris_BisB18: 
NC_007925.fna 

./Rhodopseudomonas_palustris_BisB5: 
NC_007958.fna 

./Rhodopseudomonas_palustris_CGA009: 
NC_005296.fna 
NC_005297.fna 

所以,通過查看這個文件,我知道哪些文件進入哪個文件夾。與所有的1000個文件的文件夾在一起,看起來是這樣的:

results_NC_004193.fna.1.ebwt.map 
results_NC_004307.fna.1.ebwt.map 
results_NC_004310.fna.1.ebwt.map 
results_NC_004311.fna.1.ebwt.map 
results_NC_004337.fna.1.ebwt.map 
results_NC_004342.fna.1.ebwt.map 
results_NC_004343.fna.1.ebwt.map 
results_NC_004344.fna.1.ebwt.map 

等等...

你可以看到所有的1000個文件的文件名是依賴於原來的名稱的文件夾設置(如果這是解釋它的好方法)。

我想用原始設置將這些results_XXXXXXXX文件移動到文件夾(必須創建新文件夾)。因此,它應該是這樣的:

./Rhodococcus_RHA1: (this is a folder) 
results_NC_008268.fna.1.ebwt.map 
results_NC_008269.fna.1.ebwt.map 
results_NC_008270.fna.1.ebwt.map 
results_NC_008271.fna.1.ebwt.map 

./Rhodoferax_ferrireducens_T118: 
results_NC_007901.fna.1.ebwt.map 
results_NC_007908.fna.1.ebwt.map 

我真的不知道如何做到這一點...也許某種mov命令?我很感謝這個問題的幫助。

+0

您可以確實編寫C或Java程序。可能是MV和常客的組合表達也可以做到這一點,但我不知道那種技巧來告訴你如何。 – JuanZe 2012-03-22 17:16:10

回答

1

從您擁有這1000個文件的文件夾運行以下命令。路徑/到/原始/文件是原始文件的路徑(您執行ls -R的路徑)。你應該得到一個mv命令列表。驗證其中幾個以確認這些是正確的。如果是這樣,請添加| sh接下來的命令並重新運行它來執行這些命令。如果在1000個文件夾中沒有所有相應的文件,則會得到mv命令,它會返回「找不到文件」,這可以忽略或通過管道傳遞給/ dev/null。這假設您始終在原始文件夾中有一個文件,以便它知道在哪裏移動文件。否則,這1000個文件中的一部分將不會被移動。一如既往,在做這件事之前要做好備份。

find path/to/original/files -type f | awk -F"/" '{ path=$0; sub($NF, "", path); printf("mv results_%s.1.ebwt.map \"%s\"\n", $NF, path);}' 
+0

它會生成命令來移動找到相應原始文件的文件。它可以在任何地方 - 在原始文件夾或子文件夾中。這個命令本身不會移動。它只生成mv命令。因此,您可以根據需要多次安全地運行它。運行它,看看這些命令並驗證。只有在驗證後,將命令的輸出傳送給sh以實際移動文件。 – 2012-03-22 17:52:17

+0

它確實給了我一堆'mv'命令。當我嘗試運行其中的一些時......它什麼也不做,並給我一個提示性的東西。當您在腳本中直接寫入終端時獲得的東西。 – dawnoflife 2012-03-22 17:52:31

+0

發佈由此生成的示例mv命令。 – 2012-03-22 17:53:36