xargs 在建立目錄時導致錯誤?

xargs 在建立目錄時導致錯誤?

我想建立大約 100 個唯一命名的目錄,它們都包含 README.md 檔案。我嘗試使用文字檔案“PICOCTF.txt”執行此操作,其中包含:

vault-door-1
whats a net cat
strings it
Easy1
logon
13
caesar
dont-use-client-side
Bases
First Grep
So Meta
shark on wire 1
extensions
What Lies Within
la cifra de
picobrowser
asm1
Tapping
Flags
Based
Mr-Worldwide
plumbing
vault-door-3
rsa-pop-quiz
Client-side-again
Pitter, Patter, Platters
Web Gauntlet
asm2
m00nwalk
WhitePages
c0rrupt
vault-door-4
like1000
Guessing Game 1
droids0
mus1c
m00nwalk2
waves over lambda
messy-malloc
flag_shop
Investigative Reversing 0
asm3
miniRSA
vault-door-5
reverse_cipher
Irish-Name-Repo 1
shark on wire 2
Guessing Game 2
OTP Implementation
Investigative Reversing 2
droids1
Investigative Reversing 1
WebNet0
vault-door-6
seed-sPRiNG
Irish-Name-Repo 2
1_wanna_b3_a_r0ck5tar
b00tl3gRSA2
asm4
Irish-Name-Repo 3
JaWT Scratchpad
Java Script Kiddie
Need For Speed
Investigative Reversing 4
B1ll_Gat35
droids2
vault-door-7
AES-ABC
Investigative Reversing 3
vault-door-8
droids3
Java Script Kiddie 2
WebNet1
investigation_encoded_1
b00tl3gRSA3
john_pollard
droids4
Forky
investigation_encoded_2
sice_cream
B1g_Mac
zero_to_hero

在命令列和文字檔案的目錄中,我運行命令來產生目錄:

xargs -a PICOLIST.txt -d '\n' mkdir

或(兩者有相同的結果)

while read -r line; do mkdir -p "$line" ; done < PICOLIST.txt

它確實可以創建它們,只有一個小問題。我意識到它只創建已知的目錄,但是當我運行它時,我得到末尾帶有(空?)特殊字元的檔案。我不知道這是否是 Windows 檔案系統的問題,因為我已經格式化了我的文字檔案以刪除任何可能導致該問題的內容(至少我認為)。例如:

這是運行命令之前的情況:

在此輸入影像描述

這是在它運行的命令之後:

在此輸入影像描述

如您所看到的,每個資料夾名稱後面都有一個特殊字元(星號?空位元組?在 xargs 中破解新行時出現問題?)...

我的計劃是在終端機中運行以下程式碼,但使用此文字檔案:

xargs -a PICOLISTFILL.txt -d '\n' touch
vault-door-1/README.md
whats a net cat/README.md
strings it/README.md
Easy1/README.md
logon/README.md
13/README.md
caesar/README.md
dont-use-client-side/README.md
Bases/README.md
First Grep/README.md
So Meta/README.md
shark on wire 1/README.md
extensions/README.md
What Lies Within/README.md
la cifra de/README.md
picobrowser/README.md
asm1/README.md
Tapping/README.md
Flags/README.md
Based/README.md
Mr-Worldwide/README.md
plumbing/README.md
vault-door-3/README.md
rsa-pop-quiz/README.md
Client-side-again/README.md
Pitter, Patter, Platters/README.md
Web Gauntlet/README.md
asm2/README.md
m00nwalk/README.md
WhitePages/README.md
c0rrupt/README.md
vault-door-4/README.md
like1000/README.md
Guessing Game 1/README.md
droids0/README.md
mus1c/README.md
m00nwalk2/README.md
waves over lambda/README.md
messy-malloc/README.md
flag_shop/README.md
Investigative Reversing 0/README.md
asm3/README.md
miniRSA/README.md
vault-door-5/README.md
reverse_cipher/README.md
Irish-Name-Repo 1/README.md
shark on wire 2/README.md
Guessing Game 2/README.md
OTP Implementation/README.md
Investigative Reversing 2/README.md
droids1/README.md
Investigative Reversing 1/README.md
WebNet0/README.md
vault-door-6/README.md
seed-sPRiNG/README.md
Irish-Name-Repo 2/README.md
1_wanna_b3_a_r0ck5tar/README.md
b00tl3gRSA2/README.md
asm4/README.md
Irish-Name-Repo 3/README.md
JaWT Scratchpad/README.md
Java Script Kiddie/README.md
Need For Speed/README.md
Investigative Reversing 4/README.md
B1ll_Gat35/README.md
droids2/README.md
vault-door-7/README.md
AES-ABC/README.md
Investigative Reversing 3/README.md
vault-door-8/README.md
droids3/README.md
Java Script Kiddie 2/README.md
WebNet1/README.md
investigation_encoded_1/README.md
b00tl3gRSA3/README.md
john_pollard/README.md
droids4/README.md
Forky/README.md
investigation_encoded_2/README.md
sice_cream/README.md
B1g_Mac/README.md
zero_to_hero/README.md

我使用的兩個文字檔案都是在 notepad++ 中建立的,設定為“Unix (LF)”
在此輸入影像描述

任何幫助將不勝感激!

答案1

假設:PICOLIST.txt使用 DOS/Windows 行結尾(CRLF、\r\n)。

您嘗試的兩個命令 ( read, xargs) 都期望 Unix 行結尾 (LF, \n)。他們將其視為\r普通角色。在您的情況下,\r包含在mkdir每次傳遞的字串中。

用於dos2unix轉換檔案。

如果您必須在 Windows 中編輯此類文件,請使用允許您選擇 Unix 行結尾的編輯器。可以使用具有此功能的編輯器來代替dos2unix修復目前文件。

可能PICOLISTFILL.txt同樣有「缺陷」。

答案2

如果您希望保留 txt 檔案的原始格式,您可以在 xargs 命令前面加上以下前綴:

cat PICOLISTFILL.txt | dos2unix | xargs ... 

如果這樣做的話, xargs 部分將不需要“-a”或“-d”標誌。

相關內容