Bash

Bash:根據目錄名創建文件名

  • April 9, 2017

假設我有一個類似的目錄結構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將更改任何現有文件的時間戳。

您可以先進行試執行,然後替換touchecho

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

引用自:https://unix.stackexchange.com/questions/357882