Если вы думаете, что вам это понадобится чаще и не хотите каждый раз вводить путь дважды, вы также можете создать функцию Bash или скрипт для нее.
Функция Bash (добавьте эту строку, чтобы она ~/.bashrcстала доступной для вашего пользователя, иначе она снова исчезнет, когда вы выйдете из терминала):
Скрипт Bash (сохраните его с /usr/local/bin/touch2помощью sudo, чтобы сделать его доступным для всех пользователей, иначе только ~/bin/touch2для вашего пользователя):
я могу отредактировать оригинальную touch команду и добавить -pк ней переключатель ?
MA Heshmat Khah
3
@HeshmatKhah Это должно быть возможно, но не рекомендуется дублировать исполняемые файлы системы с помощью собственных сценариев или функций. Вы можете использовать имя touch-p(без пробела!) Вместо touch2, если вы предпочитаете «p», но я не буду пытаться заменить исходную команду.
Byte Commander
1
Заметьте, что вы можете использовать удаление суффиксов вместо того dirname, чтобы делать то mkdir -p "${1%/}" && touch "$1"же самое, что и askubuntu.com/a/928544/295286
Сергей Колодяжный
7
Можно использовать installкоманду с -Dфлагом.
bash-4.3$ install -D /dev/null mydir/one/two
bash-4.3$ tree mydir
mydir
└── one
└── two
1 directory, 1 file
bash-4.3$
Если у нас есть несколько файлов, мы могли бы рассмотреть возможность использования списка элементов (обратите внимание, не забывайте указывать элементы с пробелами) и повторять их:
bash-4.3$ for i in mydir/{'subdir one'/{file1,file2},'subdir 2'/{file3,file4}} ; do
> install -D /dev/null "$i"
> done
bash-4.3$ tree mydir
mydir
├── one
│ └── two
├── subdir 2
│ ├── file3
│ └── file4
└── subdir one
├── file1
└── file2
Или альтернативно с массивом:
bash-4.3$ arr=( mydir/{'subdir one'/{file1,file2},'subdir 2'/{file3,file4}} )
bash-4.3$ for i in "${arr[@]}"; do install -D /dev/null "$i"; done
bash-4.3$ tree mydir
mydir
├── one
│ └── two
├── subdir 2
│ ├── file3
│ └── file4
└── subdir one
├── file1
└── file2
При таком подходе новый файл получает права на выполнение по умолчанию. Чтобы дать ему те же разрешения, которые он получал бы при прикосновении, можно использоватьinstall -m 644 -D /dev/null <filepath>
ricab
1
Для этого вы можете создать свою собственную функцию, пример ниже:
Сначала мы вставляем функцию в конец файла ~ / .bashrc с помощью команды echo. Флаг -p в функции позволяет создавать вложенные папки, такие как fldr2 из нашего примера. Наконец, мы обновляем файл с помощью команды source и в итоге выполняем недавно созданную команду mkfile.
touch
команду и добавить-p
к ней переключатель ?touch-p
(без пробела!) Вместоtouch2
, если вы предпочитаете «p», но я не буду пытаться заменить исходную команду.dirname
, чтобы делать тоmkdir -p "${1%/}" && touch "$1"
же самое, что и askubuntu.com/a/928544/295286Можно использовать
install
команду с-D
флагом.Если у нас есть несколько файлов, мы могли бы рассмотреть возможность использования списка элементов (обратите внимание, не забывайте указывать элементы с пробелами) и повторять их:
Или альтернативно с массивом:
источник
install -m 644 -D /dev/null <filepath>
Для этого вы можете создать свою собственную функцию, пример ниже:
Сначала мы вставляем функцию в конец файла ~ / .bashrc с помощью команды echo. Флаг -p в функции позволяет создавать вложенные папки, такие как fldr2 из нашего примера. Наконец, мы обновляем файл с помощью команды source и в итоге выполняем недавно созданную команду mkfile.
источник