¿Xargs causa error cuando se usa para crear directorios?

¿Xargs causa error cuando se usa para crear directorios?

Quiero crear alrededor de 100 directorios con nombres únicos que contengan un archivo README.md. Intenté hacer esto usando un archivo de texto, "PICOCTF.txt", que contiene:

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

En la línea de comando y en el directorio del archivo de texto, ejecuto el comando para generar los directorios:

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

o (ambos tienen el mismo resultado)

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

Funciona para crearlos, solo hay un pequeño problema. Me doy cuenta de que solo crea el directorio para saber, pero cuando lo ejecuto, obtengo archivos con un carácter especial (¿nulo?) al final. No sé si esto es un problema con el sistema de archivos de Windows, ya que formateé mi archivo de texto para eliminar cualquier cosa que pudiera causar ese problema (al menos eso pensé). Por ejemplo:

Esto es antes de ejecutar el comando:

ingrese la descripción de la imagen aquí

Esto es después del comando que ejecuta:

ingrese la descripción de la imagen aquí

Como puede ver, hay un carácter especial (¿asterisco? ¿byte nulo? ¿problema al descifrar una nueva línea en xargs?) después de cada nombre de carpeta...

Mi plan es ejecutar el siguiente código en la terminal pero con este archivo de texto:

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

Los dos archivos de texto que estoy usando se crearon en notepad++ configurados en "Unix (LF)"
ingrese la descripción de la imagen aquí

¡Cualquier ayuda sería muy apreciada!

Respuesta1

Hipótesis: PICOLIST.txtutiliza finales de línea de DOS/Windows (CRLF, \r\n).

Ambos comandos que probó ( read, xargs) esperan finales de línea de Unix (LF, \n). Lo tratan \rcomo a un personaje normal. En su caso \restá incluido en la cadena que se pasa mkdircada vez.

Úselo dos2unixpara convertir el archivo.

Si debe editar dicho archivo en Windows, utilice un editor que le permita elegir finales de línea de Unix. Se puede utilizar un editor con esta capacidad en lugar de dos2unixarreglar el archivo actual.

Posiblemente PICOLISTFILL.txtsea igualmente "defectuoso".

Respuesta2

Si desea mantener los archivos txt en el formato original, puede anteponer los comandos xargs con:

cat PICOLISTFILL.txt | dos2unix | xargs ... 

La parte xargs no necesitará el indicador "-a" o "-d" si se hace de esta manera.

información relacionada