用 Linux 指令依文字列表複製和重新命名檔案,並用 QGIS 以圖層名稱新增屬性

linux sh 複製 重新命名




地理資訊系統的任務方面,有時我們會需要複製相同的圖層 (shp) 並逐一針對不同條件進行修改。如果數量很少的話,用人工的方式手動進行複製當然是最快的。但職場有這麼簡單的話,流浪貓早就下班了。


因為老闆要求的圖層數量,往往是數千甚至數萬個。翠維尼


廢話不多說,如果你在工作方面也遇到相同的麻煩,可以用下面這段 Linux 的 script 指令碼來解決。



myf.shp 要複製的圖層
list.txt 名稱列表
list.txt 內容
no1
no2
no3
...
#!/bin/bash

# 取得 list.txt 的內容
files=$(cat list.txt)

# 逐一將檔案複製並重新命名
for file in $files; do
  cp myf.shp "$file.shp"
done

#!/bin/bash

# 逐行讀取 list.txt,並對每個文件進行複製和重新命名
while IFS= read -r file; do
  cp myf.shp "$file.shp"
done < list.txt

當然,老闆有這麼好打發,那麼你就太小看職場了。因為上面的人後續往往會加碼,提出更多的要求。例如建立新欄位,並依圖層名稱新增屬性。


幸好,這種批次、大量且繁瑣的任務,可以用 QGIS 來解決,而方法也很簡單。


  1. 用 Merge vector layers 合併圖層
  2. 啟動 Field Calculator
  3. 勾選 Create a new field 並輸入名稱和指定欄位類型
  4. Expression 輸入 @layer_name


如此一來,就能依據圖層名稱新增欄位和屬性了。




延伸閱讀

更多 QGIS 教學

留言

這個網誌中的熱門文章

寶鐘瑪琳中之人前世照片、年齡分析