移動名稱以 - 與 list.txt 檔案相符的數字結尾的目錄

移動名稱以 - 與 list.txt 檔案相符的數字結尾的目錄

資料夾結構圖:

在此輸入影像描述

我對高級 shell 命令和腳本非常陌生。我有基本的終端知識,但以前從未嘗試過創建這樣的自動化。純粹的新手。

我在這篇文章中簡化了我的目標,但實際專案將涉及數千個資料夾。

基本上我有一個來源資料夾和目標資料夾。 Source 資料夾包含前綴為“Car”的目錄,後面跟著“三個數字”

我在來源資料夾中有一個名為 list.txt 的文字文件,它是每行「三個數字」的列表。

我想編寫一個命令或腳本來查找目錄並讀取列表。如果目錄名稱中的最後三位數字與清單中的三位數字相符。我想將匹配的資料夾移動到目標資料夾。

我已經使用 find、-exec mv、xargs、“while IFS read”閱讀了各種方法,但我真的不知道解決此問題的最佳方法。我剛開始,希望這個論壇上有人能插話而不是毆打我。

答案1

Destination在和的父目錄中運行的腳本Source.在您的圖片中):

#!/bin/sh
while IFS= read -r l; do
   mv "Source/Car$l/" Destination/.
done < Source/list.txt

該腳本Source/list.txt逐行讀取。對於每一行,$l它都會嘗試將名為 的目錄Source/Car$l移到Destination/.

中的點路徑名元件Destination/.是一個技巧,以防Destination不存在。如果Destination不存在,則第一個mv "Source/Car…/" Destination/將重命名Source/Car…/為,Destination/而不是將其放入其中Destination/。點有區別:如果目標存在Destination/.且不Destination/存在,那麼我們的mv命令將退出並出現錯誤。

腳本是啞的,它不會對其讀取的內容執行任何健全性檢查Source/list.txt。例如,如果一行是001/../../../../../../../../../../home/roco/.ssh,那麼腳本可能會將您的~/.ssh/目錄移動到Destination/.如果有空行,則腳本將嘗試移動Source/Car/。如果最後一行不完整,那麼它將無法到達mv(請參閱為什麼這個while迴圈無法辨識最後一行?)。

相關內容