Нужно коснуться файла в нескольких каталогах, используя одну строку в Linux

#linux #shell #xargs

#linux #оболочка #xargs

Вопрос:

У меня много каталогов. Мне нужно cd открыть все каталоги и создать 2 файла. Я пытался сделать это с помощью xargs, но у меня не получилось. Не могли бы вы рассказать мне, как этого добиться?

Комментарии:

1. у вас есть эти два файла? являются ли эти два файла одинаковыми для всех папок?

2. @Prince: Да.. У меня есть только два файла, и это будет то же самое

3. пустой файл или в нем есть содержимое? можете ли вы поделиться именем файлов

4. Что вы пробовали, и как это не удалось?

Ответ №1:

Если вы не хотите или не должны запускать find , но у вас есть список каталогов, что-то вроде этого:

 xargs -i touch {}/a {}/b <directories.txt
 

Если пути к каталогам полностью регулярны (например, все подкаталоги на два уровня ниже), это может быть так же просто, как

 touch */*/a */*/b
 

Комментарии:

1. Спасибо.. Это сработало.. Теперь еще одно сомнение.. извините за беспокойство.. Мне нужно перейти ко всем подкаталогам в каталоге и выполнить эту команду «smt pull»..

2. Вероятно, вам следует задать отдельный вопрос. for d in */.; do ( cd "$d"; smt pull ) done

Ответ №2:

    find <path> -type d -exec touch {}/a {}/b ;
 

путь может быть. если вы уже находитесь в верхнем каталоге, над которым вам интересно работать.

Комментарии:

1. Это из bash с поиском из GNU findutils

2. опечатка … не удалось передать путь

3. В моей версии find вам не нужно передавать путь, по умолчанию используется текущий. Я могу кому-нибудь отредактировать его.

4. По крайней мере, в Linux по умолчанию . используется значение, если вы его не предоставляете.

5. @tripleee: По крайней мере, я не знаю этого факта.