Linux
通過使用 shell 腳本過濾修改日期,將文件從 hdfs 文件夾複製到另一個 hdfs 位置
我的 hdfs 位置有 1 年的數據,我想將過去 6 個月的數據複製到另一個 hdfs 位置。是否可以直接從 hdfs 命令複製 6 個月的數據,還是我們需要編寫 shell 腳本來複製過去 6 個月的數據?
我已經嘗試過 hdfs 命令來執行此操作,但沒有奏效。
我嘗試使用下面的 shell 腳本,它工作正常,直到創建 TempFile 但拋出錯誤
$ sh scriptnew.sh scriptnew.sh: line 8: syntax error: unexpected end of file
並且腳本不會進一步執行。
下面是我使用的shell腳本。
#!/bin/bash hdfs dfs -ls /hive/warehouse/data.db/all_history/ |awk 'BEGIN{ SIXMON=60*60*24*180; "date +%s" | getline NOW } { cmd="date -d'\''"$6" "$7"'\'' +%s"; cmd | getline WHEN; DIFF=NOW-SIXMON; if(WHEN > DIFF){print $8}}' >> TempFile.txt cat TempFile.txt |while read line do echo $i hdfs dfs -cp -p $line /user/can_anns/all_history_copy/; done
可能是什麼錯誤以及如何解決這個問題?
要將 6 個月的文件從 hdfs 位置複製到另一個位置,我們可以使用以下腳本。
腳本應該從您的本地 linux 位置執行。
#!/bin/bash hdfs dfs -ls /hive/warehouse/data.db/all_history/ |awk 'BEGIN{ SIXMON=60*60*24*180; "date +%s" | getline NOW } { cmd="date -d'\''"$6" "$7"'\'' +%s"; cmd | getline WHEN; DIFF=NOW-SIXMON; if(WHEN > DIFF){print $8}}' >> TempFile.txt cat TempFile.txt |while read line do echo $i hdfs dfs -cp -p $line /user/can_anns/all_history_copy/; done
> > > > > > 第 2 行:我們正在將最長 180 天的文件列表複製到 TempFile。然後我們遍歷這個 Temp 文件,如果找到匹配項,則複製該文件。 > > > > > > > > >
如果您是從 windows 編寫腳本並複製到 linux 機器,有時它可能無法顯示語法錯誤。為避免輸入錯誤,將腳本複製到 linux 機器本地路徑後執行以下命令。 sed -i ’s/\r//’ 然後執行腳本 >>> sh FileName.sh