[英]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.