回答:
ソースファイルが指定されている場合、インストールはこれを行います/dev/null
。-D
引数はすべて、親ディレクトリを作成するにはこう述べています。
anthony@Zia:~$ install -D /dev/null /tmp/a/b/c
anthony@Zia:~$ ls -l /tmp/a/b/c
-rwxr-xr-x 1 anthony anthony 0 Jan 30 10:31 /tmp/a/b/c
それがバグかどうかはわかりません。デバイスファイルでの動作はマンページに記載されていません。また、空のファイル(mktemp
たとえば、で新しく作成されたもの)をソースとして指定することもできます。
私はこのような状況に頻繁に遭遇したので、.bashrc
ファイルに関数を書いただけです。こんな感じ
function create() {
arg=$1
num_of_dirs=$(grep -o "/" <<< $arg | wc -l)
make_dirs=$(echo $arg | cut -d / -f1-$num_of_dirs)
mkdir -p $make_dirs && touch $arg
}
したがって、存在しないディレクトリのパス内にファイルを作成したい場合は、
create what/is/it # will create dirs 'what' and 'is', with file 'it' inside 'is'
touchp
、例えばmkdir -p
変数を個別に設定すると、変数を変更して、履歴からコマンドを簡単に再実行できるようになりますが、1行に保持することをお勧めします。
B="./make/this/path" && mkdir -p -- "$B" && touch -- "$B/file.txt"
「偽造」することは可能です。
Rob Griffithsは2007年にMacworld.com に「たくさんの新しいフォルダーを簡単に作成」という記事を投稿xargs
しましたmkdir
。
xargs
に渡される各引数の値を含むフラグでplaceholder
({}
)を参照できます。そのフラグがある場合とない場合の違いは次のとおりです。-I
xargs
$ foo.txt bar.txt | xargs echo
$ => foo.txt bar.txt
$ foo.txt bar.txt | xargs -I {} echo {}
$ => foo.txt
$ => bar.txt
xargs
sh -c
フラグを使用して任意のシェルコマンドを実行することもできます。
foo.txt bar.txt | xargs sh -c 'echo arbitrary command!'
私たちは、これらの概念とを組み合わせることができmkdir -p
代わりのmkdir
とでは考え方@ldxの答えは、これを生成します:
$ cat files.txt | xargs -I {} sh -c 'f="{}" && mkdir -p -- "${f%/*}" && touch -- "$f"'
このコマンドは、基本的には、ファイルの行で区切られたリスト内の各ファイル名は、ファイルの一部をオフチョップ、とディレクトリを作成マッピングしmkdir -p
、その後、touch
それのそれぞれのディレクトリにあるファイル名をES。
たとえば、私のfiles.txt
見た目は次のようになります。
deeply/nested/foo/bar.txt
deeply/nested/baz/fiz.txt
cat files.txt
生産する deeply/nested/foo/bar.js
deeply/nested/baz/fiz.txt
deeply/nested/foo/bar.js
deeply/nested/baz/fiz.txt
にパイプされます xargs
-I {}
、xargs
各引数は独自のコマンドに変換されるため、次のようになります。
deeply/nested/foo/bar.txt
deeply/nested/baz/fiz.txt
&&
コンビネーターを使用して順次実行する3つのコマンドをグループ化するシェルコマンドを実行します。最初のコマンドは、以前に登録したプレースホルダーを使用して環境変数(次のファイルパスで再利用)にファイルを保存します。持ってる:
f=deeply/nested/foo/bar.txt
f=deeply/nested/baz/fiz.txt
mkdir -p
、ファイル名を切り取る必要があります。使用して十分に簡単'${f%/*}'
:
mkdir -p deeply/nested/foo/
mkdir -p deeply/nested/baz/
f
場合に変数全体を再参照しますtouch
。
touch deeply/nested/foo/bar.txt
touch deeply/nested/baz/fiz.txt
cat files.txt | xargs -I {} sh -c 'f="{}" && mkdir -p -- "${f%/*}" && touch -- "$f"'
、UUOCを持っている、あなたはとき、バックシェルにサブシェルxargsのにサブシェルwhile read
ループは、より理にかなって
while read f; do mkdir -p "$(dirname "$f")"; touch "$f"; done < files.txt
。あなたはUUOCのために10秒のインターネット検索を行う傾けるということも言っている