2014-01-12 18 views
0

我有幾組文件(幾百個)。在每個集合中,每個文件都與文件名中編碼的日期(年/月/日)相關。我想要執行一個命令,在每個集合中爲特定日期輸入一個文件。 由於文件在某些​​集合中有時缺失,我只想在所有集合包含特定日期的文件時才啓動該命令。對同一日期的文件啓動命令的工具

我想知道是否有任何現有的(命令行或其他)工具可以做這種事情。我搜查了但我找不到任何東西。 使用日期作爲文件的關鍵字不是必需的。我想任何足夠通用的工具都會提供一種將密鑰指定爲參數的方法。

編輯:

  • 還有不到10套,但每一個都包含數百個文件。

  • 每組位於一個單獨的目錄中。

+0

這似乎是一個非常專業的要求,我從來沒有聽說過它的工具。 – Barmar

+1

你有幾套或幾百套?他們有不同的文件名,或者他們在單獨的目錄或...?日期是如何編碼的文件名? – John1024

+0

任務「是否爲此給定日期存在任何文件」或「是否存在文件存在的日期」?如果是後者,日期範圍是多少? – tripleee

回答

0

由於這個答案被標記使用bash,這裏是一個bash腳本來檢查文件是否存在包含在每個給定的套某些日期字符串(如腳本的第一個參數提供)。如果它存在於每個人,然後some_command執行:

#!/bin/bash 
datestr=$1 
all_exist=Y 
for set in dir1 dir2 dir3 dir4 
do 
    [ -f "$set/"*"$datestr"* ] || all_exist="" 
done 
[ "$all_exist" ] && some_command 
+0

通配符不能被引用。 – tripleee

+0

@tripleee感謝您的支持。 – John1024

0

所以這真的可以分爲兩個任務:

  • 查找其中一組存在
  • 啓動命令每個日期設置

你是不透露你的文件是如何組織的,但如果你有類似boom20140112/a.txtboom20140112/b.txt形成一組,和foo20140111/a.txtfoo20140111/c.txt另外,你可以用

dates() { 
    printf "%s\n" *201[0-9][0-9][0-9][0-9][0-9]/. | 
    sed -e 's%^[0-9]*%%' -e 's%/\.$%%' | 
    sort -u 
} 

找到的日期如果你的套看起來不同,你也許可以適應這一點。總體思路是獲取相關文件名的列表,去除不是日期的部分,並刪除任何重複項。現在你有一個日期列表。

這裏是另一個實現,它假定您的文件名爲tags/tags_(date)_a.txttags/tags_(date)_b.txtinput/samples_(date).txt形成每個日期的一個集合,其中日期的格式如2014-01-12。

dates() { 
    printf "%s\n" input/* tags/* | 
    sed 's/.*_\(201[1-9]-[0-9][0-9]-[0-9][0-9]\)[_.].*/\1/' | 
    sort -u 
} 

鑑於此,請在日期上循環並在每個集合上運行您的命令。

dates | while read -r date; do 
    command *$date/* 
done 
+0

很容易適應其他文件命名模式,但我不想讓這太抽象。如果您可以記錄您的套件的實際外觀,我們可以開發出適用於該場景的解決方案。 – tripleee

相關問題