usar o "touch" para criar directórios? [fechado]

1) no directório "A":

find . -type f > a.txt

2) no directório "B":

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

3) resultado: o 2) "cria os ficheiros" [quero dizer apenas com o mesmo nome de ficheiro, mas com o tamanho de 0 bytes] ok. Mas se houver subdirs no diretório "A", então o 2) não pode criar os arquivos no subcir, porque não há diretórios nele.

Pergunta: existe uma maneira de que touch possa criar diretórios?

 11
Author: ajreal, 2011-01-17

2 answers

Desde que find emite um ficheiro por linha:

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

    touch "$file";
done

Editar:

Isto seria um pouco mais eficiente se os directórios fossem criados numa etapa separada:

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

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

E, no, touch não pode criar directórios por si só.

 9
Author: thkala, 2011-01-17 09:23:42
Não. Por que não usar apenas o mkdir em vez de tocar para diretórios?
 0
Author: Peter Taylor, 2011-01-17 09:08:26