Bash
Bash:根據目錄名創建文件名
假設我有一個類似的目錄結構
Parent_dir/<name>/<date>/
如何使用放置的 bash 腳本
Parent_dir
瀏覽每個/<name>/<date>/
子目錄並<name>_<date>.txt
在/<name>/<date>/
子目錄中創建一個空白文本文件?
如果您希望文件名按字面意思命名
name_date.txt
,請嘗試以下操作:#!/bin/bash for dir in $(find . -maxdepth 2 -mindepth 2 -type d) do touch "$dir"/name_date.txt done
如果您希望文件名是
<name>_<date>.txt
,請改為執行以下操作:#!/bin/bash IFS=$'\n' for dir in $(find . -maxdepth 1 ! -path . -type d) do for subdir in $(find "$dir" -mindepth 1 -type d) do base_dir=$(basename $dir) base_subdir=$(basename $subdir) touch "$base_dir"/"$base_subdir"/"$base_dir"_"$base_subdir".txt done done
來自
Parent_dir
:for d in */*/; do f=${d/\//_}; touch -- "$d"/"${f::-1}.txt"; done
請注意,這
touch
將更改任何現有文件的時間戳。您可以先進行試執行,然後替換
touch
為echo
:for d in */*/; do f=${d/\//_}; echo -- "$d"/"${f::-1}.txt"; done
for d in */*/
讓我們遍歷兩層深的目錄f=${d/\//_}
替換第一個目錄分隔符/
並將_
輸出保存為變數f
"$d"/"${f::-1}.txt"
展開為目錄名,後跟所需的文件名;從變數${f::-1}
中剝離最後一個/``f
請注意,由於目錄分隔符
/
與變數一起存在d
,因此/
in"$d"/"${f::-1}.txt"
是多餘的;由於幾乎所有系統都採用//
single/
,這應該不是問題。或者,您可以滴水/
:for d in */*/; do f=${d/\//_}; touch -- "${d}${f::-1}.txt"; done