Mv

如何為 bash 命令每行讀取多個參數?

  • December 16, 2017

我有一個格式為的文件(ordered_names)

pub 000.html
pub.19 001.html

大約 300 行,我找不到將其提供給 mv 命令的方法。

我已閱讀將儲存在文件中的字元串作為命令的參數列表提供?,但我無法得到我的目的。

以下是我所做的一些嘗試:

for line in "$(cat ../ordered_files.reversed)"; do mv  $(echo "$line"); done
for line in "$(cat ../ordered_files.reversed)"; do echo mv $(echo $line | cut -d' ' -f 1) $(echo $line | cut -d' ' -f 2) ; done

嘗試:

while read -r file1 file2; do mv -n -- "$file1" "$file2"; done <inputfile

這假定輸入文件中每一行的文件名是用空格分隔的。當然,這僅適用於文件名本身不包含空格的情況。如果他們這樣做,那麼您需要不同的輸入格式。

這個怎麼運作

  • while read -r file1 file2; do

這開始了一個while循環。只要輸入可用,循環就會繼續。對於每一行輸入,讀取兩個參數:file1file2

  • mv -n -- "$file1" "$file2"

這移動file1file2

該選項-n可防止您覆蓋目標位置的任何文件。當然,如果您打算覆蓋文件,請刪除此選項。

該字元串--表示選項的結束。如果任何文件名以-.

  • done

這標誌著while循環的結束。

  • <inputfile

這告訴while循環從名為inputfile.

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