我從修改日期創建了一堆檔案夾,如下所示:.. 2012-11-29 2012-11-20 ..
現在我想將檔案移動到這些檔案夾中,以防修改日期等于檔案夾名稱。這些檔案的名稱中包含空格。
如果我運行它,我會得到一個看起來像檔案夾名稱的串列:
find . -iname "*.pdf" -print0 | while read -d $'\0' file; do stat -c "%.10y" "$file"; done
如何獲取此輸出并在移動這些檔案的腳本中使用它,例如(偽代碼):
find . -iname "*.pdf" -print0 | while read -d $'\0' file; do mv $<FILEWITHWHITESPACEINNAME> <FOLDERNAMEDLIKE $file stat -c "%.10y" "$file" > ; done
uj5u.com熱心網友回復:
find . -iname "*.pdf" -print0 |
while IFS= read -r -d '' file; do
folder=$(stat -c "%.10y" -- "$file") || continue # store date in variable
[[ $file = ./$folder/$file ]] && continue # skip if already there
mkdir -p -- "$folder" || continue # ensure directory exists
mv -- "$file" "$folder/" # actually do the move
done
- 要正確讀取以 NUL 分隔的名稱,請使用
IFS=避免丟失前導或尾隨空格,并-r避免丟失檔案名中的反斜杠。請參閱BashFAQ #1。 - 在你的 shell 回圈中,你有 shell 變數——所以你可以使用其中一個來存盤你的
stat命令的輸出。請參閱如何將變數設定為 bash 中命令的輸出? - Using
--表示引數結束,所以即使你被替換為可以發出以 a而不是finda 開頭的路徑的東西,我們也不會嘗試將值視為位置引數(檔案名,在,和)。-./filestatmkdirmv - 在回圈內部使用
|| continue意味著如果任何步驟失敗,我們不會執行后續步驟——因此我們不會嘗試執行mkdirifstat失敗,也不會嘗試執行mvifmkdir失敗。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/473083.html
