2011-01-17 10 views
10

1) в каталоге "А":используя «touch» для создания каталогов?

find . -type f > a.txt 

2) в "В" каталоге:

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

3) Результат: 2) "создает файлы" [я имею в виду только с тем же именем, но с размером байта 0] ok. Но если в каталоге «А» есть поддиры, то 2) не может создавать файлы в поддире, потому что в нем нет каталогов.

Вопрос: есть ли способ, что touch может создавать каталоги?

+0

Перекресток: http://superuser.com/questions/234185/using-touch-to-create-directories –

+3

@Peter: 10 вопросов, 8 с ответами. нулевые принятые ответы и нулевые приоритеты как для StackOverflow, так и для SuperUser. А теперь перекрестная почта. Sigh ... – thkala

+0

Другой [перекрестный стол] (http://serverfault.com/questions/223267/using-touch-to-create-directories). Пожалуйста, не делай этого. –

ответ

9

С find выводит один файл в строке:

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

    touch "$file"; 
done 

EDIT:

Это будет немного более эффективным, если в каталогах, где созданы в отдельной стадии:

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

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

И, no, touch не может создавать каталоги самостоятельно.

0

Нет. Почему бы просто не использовать mkdir вместо касания для каталогов?

+28

Было бы полезно создать необходимые каталоги, а затем создать файл. будет легче, чем запустить 2 команды для выполнения той же цели. Это Linux, и я ожидаю, что он будет умным;) –

Смежные вопросы