簡體   English   中英

從 zip 文件中提取 200 條第一行並將此文件創建到不同的文件夾中

[英]Exracting 200 first lines from a zip file and creating this file into a different folder

我有一個名為 /home/myusername/originalFiles 的文件夾,其中有大量 *.gz 大文件。 在這個文件夾及其子文件夾中,我們也有大量的 *.gz 大文件。 在不刪除或修改我需要的任何 *.gz 文件的情況下:

a) 對於 /home/myusername/originalFiles(和子文件夾)中的每個文件 f,展開它,

b) 從擴展的 f 中提取前 200 行

c) 將 b) 中的“200 行”文件再次轉換為 gz 文件

d) 將 c) 中的“gzipped 200 行”文件復制到另一個名為 /home/myusername/newSampleFiles 的文件夾中,但要遵守 /home/myusername/originalFiles 中的文件夾結構和名稱。 因此,如果原始文件 f 位於 /home/myusername/originalFiles/year2020 之類的子文件夾中,則 c) 中的相應“gzipped 200 行”文件必須位於 /home/myusername/newSampleFiles/year2020 中並使用相同的名稱和擴展名/home/myusername/originalFiles 中的原始文件

e) 不要保留在 a) 中獲得的任何擴展文件

f) 僅使用 Linux cmds 執行此操作

我試過了

尋找。 -type f -name "*.gz" -print | xargs -I@ sh -c 'head -n200 @ > /home/myusername/newSampleFiles/@'

但我收到錯誤消息:

/home/myusername/newSampleFiles/./someFile.txt.gz:沒有這樣的文件或目錄

while read file;
do
    file2="${file%.*}"
    gzip -cd "$file" | head -n200 > "/home/myusername/newSampleFiles$file2";
    gzip -c "/home/myusername/newSampleFiles$file2" > "/home/myusername/newSampleFiles$file"
 done <<< "$(find /path/to/dir -type f -name "*.gz")"

將 find 命令重定向到 while 循環中,將 output 的每一行讀取到變量文件中,然后使用參數擴展從 file1 中剝離任何文件擴展名並將結果讀取到 file2 中。 然后在 gzip 命令中使用這些變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM