Files
從文本文件列表創建文件
我使用以下方法創建了一個文件:
$ ls > ls.txt
現在我想去一個不同的目錄並使用這個文件來創建一堆空文件,其名稱來自
ls.txt
.最簡單的方法是什麼?
您可以使用
xargs
. 切換到新目錄後,xargs -d '\n' touch -- < path/to/ls.txt
請注意,如果輸出中最初有任何目錄
ls
,這些目錄將在新位置創建為純文件。
讓我鼓勵你退後一步。
聽起來您的實際問題是:“我的目前目錄中有一些文件,我想在不同的目錄中創建同名的空文件。”
您認為執行此操作的合理方法是首先將結果保存
ls
到文件中。一個合理的假設,但肯定不是唯一的方法!下面的呢?
for filename in *; do touch -- "/path/to/somewhere/else/${filename}" done
/path/to/somewhere/else/
您要在其中創建文件的目錄在哪裡。這種方法簡單易讀。此外,它對文件名中的空格、換行符和特殊字元是完全健壯的。如果您的個人資料別名
ls
為ls --color
.一個缺點是如果你真的有很多文件,那麼這可能會做很多額外的工作。但在它真正成為問題之前不要擔心。*
另一個缺點是,如果目前目錄中沒有文件,這將創建一個字面上稱為
*
.shopt -s nullglob
您可以通過在循環之前編寫來避免這種情況。請注意(與其他解決方案一樣)如果您
d
在目前目錄中有一個目錄,那麼d
將在目標上創建一個新的空文件。如果你想避免這種情況,你可以寫:for filename in *; do if [ -f "${filename}" ]; then touch -- "/path/to/somewhere/else/${filename}" fi done
只處理普通文件。
- 如果這是一個問題:
printf '\0\n' * | (cd /path/to/somewhere/else; xargs -0 touch --)
會很好地解決問題。