2011-01-17 9 views
10

1) en el directorio "A":usando "touch" para crear directorios?

find . -type f > a.txt 

2) en el directorio "B":

cat a.txt | while read FILENAMES; do touch "$FILENAMES"; done 

3) Resultado: la 2) "crea los archivos" [i significar sólo con el mismo nombre de archivo, pero con 0 Byte size] ok. Pero si hay subdirectores en el directorio "A", entonces el 2) no puede crear los archivos en el subdirectorio, porque no hay directorios en él.

Pregunta: ¿hay alguna manera de que touch pueda crear directorios?

+0

Publicación cruzada: http://superuser.com/questions/234185/using-touch-to-create-directories –

+3

@Peter: 10 preguntas, 8 con respuestas. cero respuestas aceptadas y cero votos ascendentes en StackOverflow y SuperUser. Y ahora una publicación cruzada. Suspiro ... – thkala

+0

Otro [publicación cruzada] (http://serverfault.com/questions/223267/using-touch-to-create-directories). Por favor no hagas eso. –

Respuesta

9

Desde find salidas de un archivo por línea:

cat a.txt | while read file; do 
    if [[ "$file" = */* ]]; then 
     mkdir -p "${file%/*}"; 
    fi; 

    touch "$file"; 
done 

EDIT:

Esto sería ligeramente más eficiente si los directorios donde se crean en un paso separado:

cat a.txt | grep/| sed 's|/[^/]*$||' | sort -u | xargs -d $'\n' mkdir -p 

cat a.txt | while read file; do 
    touch "$file"; 
done 

Y, no, touch no puede crear directorios por sí mismo.

0

No. ¿Por qué no usar simplemente mkdir en lugar de táctil para directorios?

+28

Sería útil crear directorios necesarios y luego crear el archivo. será más fácil que ejecutar 2 comandos para cumplir el mismo propósito. Es Linux y espero que sea inteligente;) –

Cuestiones relacionadas