mkdirはディレクトリ(フォルダ)を作るコマンド、touchは空ファイルを作る(正確にはファイルの時刻を更新する)コマンドです。 深い階層を一度に作りたいときは mkdir -p、中身のないファイルをすぐ用意したいときは touch ファイル名 と覚えておけば、日々の作業の大半はまかなえます。

この記事では、2つのコマンドの全オプションを早見表にまとめ、すべての例に実行結果(ls -l・tree の出力やエラー文)を付けました。 File exists、No such file or directory、Permission denied の3つのエラーは実際に再現して、原因と直し方を並べています。ブレース展開での一括作成、「階層ごとファイルを作る」ワンライナー、touch と > の違い、macOS との差も表で確認できます。

検証環境は Ubuntu 24.04 LTS、GNU coreutils 9.4(mkdir・touch)、bash 5.2.21 です。macOS(BSD版)の欄だけは手元で動かしていないため、「未実行」と明記しています。

mkdir・touchの早見表

やりたいことから選ぶ

やりたいこと コマンド ポイント
ディレクトリを1つ作る mkdir app 同名があると File exists
深い階層を一度に作る mkdir -p app/src/main/java 途中の親も作る。既にあってもエラーにならない
作った階層を表示しながら作る mkdir -pv logs/2026/10 作成したものを1行ずつ表示
権限を指定して作る mkdir -m 700 secret chmod と同じ書き方が使える
複数まとめて作る mkdir -p site/{css,js,img} ブレース展開(シェルの機能)
空白を含む名前で作る mkdir "my docs" 引用符で囲む
空ファイルを作る touch memo.txt 既にあれば時刻だけ更新(中身はそのまま)
複数の空ファイルを作る touch file{1..3}.log 連番もブレース展開で
階層ごとファイルを作る mkdir -p a/b && touch a/b/c.txt touch は親ディレクトリを作らない
無ければ作らず、あれば時刻だけ更新 touch -c file 新規作成を止める
更新時刻を指定の日時にする touch -d "2026-01-15 09:30" file 文字列で日時を指定
別ファイルと同じ時刻にする touch -r 元ファイル 対象 時刻をコピー

mkdir のオプション一覧(GNU coreutils 9.4)

オプション 長い形式 働き
-p --parents 途中の親ディレクトリも作る。既に存在してもエラーにしない
-m モード --mode=モード 権限を指定して作る(700 や u=rwx,g=rx,o=)
-v --verbose 作成したディレクトリを1つずつ表示する
-Z --context[=CTX] SELinux のセキュリティコンテキストを設定する
なし --help / --version ヘルプ/バージョン表示

touch のオプション一覧(GNU coreutils 9.4)

オプション 長い形式 働き
-a --time=atime アクセス時刻(atime)だけを変える
-m --time=mtime 更新時刻(mtime)だけを変える
-c --no-create ファイルが無いときに新しく作らない
-d 文字列 --date=文字列 現在時刻の代わりに、指定した日時を使う
-t スタンプ なし [[CC]YY]MMDDhhmm[.ss] 形式で日時を指定する
-r ファイル --reference=ファイル 指定ファイルの時刻をそのまま使う
-h --no-dereference シンボリックリンクそのものの時刻を変える
-f なし 何もしない(互換のために残っている)

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「Linux mkdir・touchの使い方|-pで階層作成と空ファイル作成」

mkdirでディレクトリを作る

基本:1つ作って ls -l で確かめる

mkdir app
ls -ld app
drwxr-xr-x 2 root root 4096 Oct  3 00:55 app

先頭の d がディレクトリの印です。権限が rwxr-xr-x(755)になるのは、umask が 022 だからです。 mkdir は「777 から umask を引いた権限」で作ります。umask を 077 に変えると次のようになります。

umask          # 現在の値を表示
umask 077
mkdir um
ls -ld um
022
drwx------ 2 root root 4096 Oct  3 00:55 um

深い階層を一度に作る(-p)

親ディレクトリがまだ無い状態で深いパスを指定すると、エラーになります。

mkdir app/src/main/java
mkdir: cannot create directory ‘app/src/main/java’: No such file or directory

-p を付けると、途中の src と main も合わせて作ってくれます。

mkdir -p app/src/main/java
tree app
app
└── src
    └── main
        └── java

4 directories, 0 files

-p にはもう1つ働きがあります。既に存在するディレクトリを指定してもエラーにならず、終了ステータスも 0 のままです。

mkdir -p app ; echo "exit=$?"
exit=0

シェルスクリプトで「無ければ作る」を書くとき、if [ ! -d app ]; then mkdir app; fi の代わりに mkdir -p app の1行で済みます。

作った内容を表示する(-v)

mkdir -pv logs/2026/10
mkdir: created directory 'logs'
mkdir: created directory 'logs/2026'
mkdir: created directory 'logs/2026/10'

-p と組み合わせると、新しく作られた階層だけが表示されます。既にあった階層は表示されないので、どこから作られたかがひと目でわかります。

権限を指定して作る(-m)

mkdir -m 700 secret
mkdir -m u=rwx,g=rx,o= shared
ls -ld secret shared
drwx------ 2 root root 4096 Oct  3 00:55 secret
drwxr-x--- 2 root root 4096 Oct  3 00:55 shared

数字(700)でも記号(u=rwx,g=rx,o=)でも指定できます。mkdir のあとに chmod を打つ2手順が1手順になります。

-p と -m を一緒に使うときは、権限が付く範囲に気を付けます。 指定した権限が付くのは最後のディレクトリだけで、途中の親は umask どおりに作られます。

mkdir -p -m 700 p1/p2/p3
ls -ld p1 p1/p2 p1/p2/p3
drwxr-xr-x 3 root root 4096 Oct  3 00:55 p1
drwxr-xr-x 3 root root 4096 Oct  3 00:55 p1/p2
drwx------ 2 root root 4096 Oct  3 00:55 p1/p2/p3

親も含めて 700 にしたいときは、(umask 077; mkdir -p p1/p2/p3) のように、かっこの中で umask を一時的に変えると全階層が 700 になります(かっこを抜けると umask は元に戻ります)。

空白やハイフンで始まる名前を作る

mkdir "my docs"     # 1つのディレクトリ「my docs」
mkdir my docs2      # 「my」と「docs2」の2つ
ls -d my*
my
my docs

(docs2 は my* に当てはまらないので表示されていませんが、作成されています。)空白を含む名前は引用符で囲む、と覚えておくと取り違えがなくなります。

ハイフンで始まる名前はオプションと解釈されます。-- を置くと「ここから先はオプションではない」という意味になります。

mkdir -- -p
ls -d -- -p
-p

ブレース展開でまとめて作る

{a,b,c} や {1..3} はブレース展開と呼ばれるシェル(bash・zsh)の機能です。mkdir や touch に渡る前に、シェルが複数の引数に広げます。

横に並べる・入れ子にする

mkdir -p site/{css,js,img}
tree site
site
├── css
├── img
└── js

4 directories, 0 files

入れ子にすると、ひな形の構成を1行で作れます。

mkdir -p proj/{src/{main,test},docs,config}
tree proj
proj
├── config
├── docs
└── src
    ├── main
    └── test

6 directories, 0 files

カンマの前後に空白を入れないのがコツです。{css, js} と書くと展開されず、{css, と js} という名前が作られます。

連番で作る

mkdir -v day{01..03}
mkdir: created directory 'day01'
mkdir: created directory 'day02'
mkdir: created directory 'day03'

{01..03} のようにゼロを付けて書くと、桁をそろえた連番になります。

ブレース展開の早見表

書き方 展開結果
mkdir -p site/{css,js,img} site/css site/js site/img
mkdir -p proj/{src/{main,test},docs} proj/src/main proj/src/test proj/docs
mkdir day{01..03} day01 day02 day03
touch file{1..3}.log file1.log file2.log file3.log
touch t/{a,b,c}/.gitkeep t/a/.gitkeep t/b/.gitkeep t/c/.gitkeep
mkdir -p {dev,stg,prod}/{logs,conf} 3×2=6個のディレクトリ

どう展開されるか不安なときは、先頭に echo を付けて echo mkdir -p site/{css,js,img} と打つと、実行せずに展開結果だけを確認できます。

touchで空ファイルを作る

基本:サイズ0のファイルができる

touch memo.txt
ls -l --time-style=long-iso memo.txt
-rw-r--r-- 1 root root 0 2026-10-03 00:55 memo.txt

サイズの欄が 0 になっています。これが空ファイルです。複数まとめて作ることもできます。

touch a.txt b.txt c.txt
touch file{1..3}.log
ls *.log
file1.log
file2.log
file3.log

既にあるファイルに touch すると中身は残る

touch の本来の役目は「時刻の更新」です。 ファイルが無いときに空で作るのは、その副作用にあたります。そのため、既にあるファイルに touch しても中身は変わりません。

echo "important" > keep.txt
touch keep.txt
wc -c keep.txt
10 keep.txt

10バイト(important と改行)のまま残っています。ディレクトリに対して touch した場合も、ディレクトリの更新時刻が変わるだけです。

無ければ作らない(-c)

touch -c ghost.txt
ls ghost.txt
ls: cannot access 'ghost.txt': No such file or directory

-c を付けると、存在するファイルの時刻だけを更新し、無いファイルは作りません。 エラーも出ず、終了ステータスは 0 です。スクリプトで「あれば時刻を進める」処理を書くときに使えます。

touchで時刻を変える(-d・-t・-a・-m・-r)

Linux のファイルには3つの時刻があります。

名前 意味 ls で見る touch で変えられるか
atime(アクセス時刻) 最後に読んだ時刻 ls -lu 変えられる(-a)
mtime(更新時刻) 最後に中身を書き換えた時刻 ls -l 変えられる(-m)
ctime(状態変更時刻) 権限や名前などが変わった時刻 ls -lc 指定できない(操作した現在時刻になる)

GNU coreutils の公式マニュアル(touch invocation)にも、touch では ctime を任意の値に設定できないと書かれています。

日時を文字列で指定する(-d)

echo hello > data.txt
touch -d "2026-01-15 09:30:00" data.txt
stat -c "atime=%x | mtime=%y | ctime=%z" data.txt
cat data.txt
atime=2026-01-15 09:30:00.000000000 +0900 | mtime=2026-01-15 09:30:00.000000000 +0900 | ctime=2026-10-03 00:55:46.406000165 +0900
hello

atime と mtime が指定した日時になり、ctime だけは操作した時刻(現在)になっています。 中身の hello はそのままです。

GNU 版の -d は相対的な表現も受け付けます。

touch -d "yesterday" y.txt
touch -d "2 days ago" z.txt
touch -d "next monday" n.txt
ls -l --time-style=long-iso y.txt z.txt n.txt
date "+%F %T"
-rw-r--r-- 1 root root 0 2026-10-05 00:00 n.txt
-rw-r--r-- 1 root root 0 2026-10-02 00:55 y.txt
-rw-r--r-- 1 root root 0 2026-10-01 00:55 z.txt
2026-10-03 00:55:46

find -mtime や find -newer の動きを試すためのテスト用ファイルを作るときに便利です。

数字だけで指定する(-t)

touch -t 202512312359.30 data.txt
ls -l --time-style=full-iso data.txt
-rw-r--r-- 1 root root 6 2025-12-31 23:59:30.000000000 +0900 data.txt

書式は [[CC]YY]MMDDhhmm[.ss] です。202512312359.30 は「2025年12月31日 23時59分30秒」を表します。秒の前はピリオドです。-t は macOS(BSD)でも同じ書式で使えるため、両方の環境で動かすスクリプトに向いています。

片方の時刻だけ変える(-a・-m)

touch -a -d "2026-02-01 00:00" data.txt
stat -c "atime=%x mtime=%y" data.txt
touch -m -d "2026-03-01 12:00" data.txt
stat -c "atime=%x mtime=%y" data.txt
atime=2026-02-01 00:00:00.000000000 +0900 mtime=2025-12-31 23:59:30.000000000 +0900
atime=2026-02-01 00:00:00.000000000 +0900 mtime=2026-03-01 12:00:00.000000000 +0900

1回目は atime だけ、2回目は mtime だけが変わっています。mkdir -m は権限、touch -m は更新時刻と、同じ -m でも意味が違う点に気を付けます。

別のファイルと同じ時刻にする(-r)

touch -r data.txt memo.txt
ls -l --time-style=long-iso data.txt memo.txt
-rw-r--r-- 1 root root 6 2026-03-01 12:00 data.txt
-rw-r--r-- 1 root root 0 2026-03-01 12:00 memo.txt

memo.txt の更新時刻が data.txt と同じになりました。ファイルを編集したあとに元の時刻へ戻したいときは、編集前に touch -r 対象 /tmp/stamp で時刻を控えておき、編集後に touch -r /tmp/stamp 対象 で戻せます。

日時の書式が違うとき

touch -d "2026-13-01" bad.txt
touch -t 2026 bad.txt
touch: invalid date format ‘2026-13-01’
touch: invalid date format ‘2026’

13月のように存在しない日付や、桁が足りない -t は invalid date format になります。-d は「読める日時の文字列」、-t は「決まった桁数の数字」と使い分けます。

階層ごとファイルを作るワンライナー集

touch には mkdir の -p にあたるオプションがありません。親ディレクトリが無いと次のようになります。

touch nodir/x.txt
touch: cannot touch 'nodir/x.txt': No such file or directory

mkdir -p と touch を && でつなぐのが基本形です。&& は「前のコマンドが成功したら次を実行する」という意味です。

コピペ用ワンライナー

# 1. 基本形:階層を作ってからファイルを作る
mkdir -p rel/1.0 && touch rel/1.0/notes.md

# 2. パスを1回だけ書く(dirname で親を取り出す)
f=out/2026/10/report.csv; mkdir -p "$(dirname "$f")" && touch "$f"

# 3. 複数のディレクトリに同じ名前の空ファイルを置く
mkdir -p t/{a,b,c} && touch t/{a,b,c}/.gitkeep

# 4. ループで「ディレクトリ+README」をまとめて作る
for d in alpha beta; do mkdir -p "w/$d" && touch "w/$d/README.md"; done

# 5. 今日の日付の階層を作る
mkdir -p "bk/$(date +%Y/%m/%d)"

# 6. 日付入りの空ファイルを作る
touch "log_$(date +%Y%m%d).txt"

# 7. 作ってそのまま移動する
mkdir -p x/y && cd x/y

# 8. 一覧(1行に1つ)からディレクトリを作る
printf "one\ntwo three\n" | xargs -d "\n" mkdir -pv

# 9. install コマンドで親ごと空ファイルを作る(GNU)
install -D /dev/null inst/a/b/empty.txt

実行結果

1・2・3 の結果を tree で確かめます。

$ tree rel
rel
└── 1.0
    └── notes.md

2 directories, 1 file

$ tree out
out
└── 2026
    └── 10
        └── report.csv

3 directories, 1 file

$ tree -a t
t
├── a
│   └── .gitkeep
├── b
│   └── .gitkeep
└── c
    └── .gitkeep

4 directories, 3 files

.gitkeep のようにドットで始まるファイルは、tree -a(または ls -a)で表示されます。Git は空のディレクトリを記録しないため、空ディレクトリを残したいときにこの形がよく使われます。

4・5・6・8 の結果です。

$ find w -type f | sort
w/alpha/README.md
w/beta/README.md

$ find bk -type d
bk
bk/2026
bk/2026/10
bk/2026/10/03

$ ls log_*
log_20261003.txt

$ printf "one\ntwo three\n" | xargs -d "\n" mkdir -pv
mkdir: created directory 'one'
mkdir: created directory 'two three'

8 は -d "\n" で区切りを改行だけにしているので、空白を含む two three も1つのディレクトリになります。

9 の install -D は、作られるファイルの権限が 755(実行可能)になります。

$ ls -l inst/a/b
total 0
-rwxr-xr-x 1 root root 0 Oct  3 00:55 empty.txt

通常のテキスト用なら install -D -m 644 /dev/null パス と権限を添えるか、1 や 2 の形を使うと揃います。

関数にしておく

よく使うなら、~/.bashrc に関数を1つ足しておくと touchp a/b/c.txt と打つだけで済みます。

# 親ディレクトリごと空ファイルを作る
touchp() {
  for f in "$@"; do
    mkdir -p "$(dirname "$f")" && touch "$f"
  done
}

# ディレクトリを作ってそのまま移動する
mkcd() { mkdir -p "$1" && cd "$1"; }

touchと「>」「: >」の違い

空ファイルを作る方法は touch 以外にもあります。違いが出るのは「既にファイルがあったとき」です。同じ 10 バイトのファイルに対して、それぞれ実行して比べました。

echo "important" > keep.txt; touch keep.txt;          wc -c keep.txt
echo "important" > keep.txt; > keep.txt;              wc -c keep.txt
echo "important" > keep.txt; : > keep.txt;            wc -c keep.txt
echo "important" > keep.txt; : >> keep.txt;           wc -c keep.txt
echo "important" > keep.txt; truncate -s 0 keep.txt;  wc -c keep.txt
10 keep.txt
0 keep.txt
0 keep.txt
10 keep.txt
0 keep.txt
書き方 ファイルが無いとき 既にあるとき 向いている場面
touch file 空で作る 中身は残る(時刻だけ更新) 中身を守りながら「存在する状態」にしたい
> file 空で作る 中身が消えて 0 バイト ログなどを空に戻したい(bash)
: > file 空で作る 中身が消えて 0 バイト 上と同じ。sh・zsh でも同じ動き
: >> file 空で作る 中身は残る(時刻も変わらない) 追記モードで開くだけ
truncate -s 0 file 空で作る 中身が消えて 0 バイト サイズを指定して切り詰めたい
echo -n > file 空で作る 中身が消えて 0 バイト echo > file は改行1文字(1バイト)が入る

: は「何もしないで成功する」コマンドです。> file だけの書き方は bash では空ファイルを作りますが、zsh では入力待ちになる設定があるため、どのシェルでも同じ動きにしたいときは : > file と書くと揃います。

echo > file は空ファイルにならない点も確かめました。

echo -n > e1; echo > e2; wc -c e1 e2
0 e1
1 e2
1 total

うっかり上書きを防ぎたいときは、set -o noclobber を設定しておく方法があります。 既にあるファイルへの > を止めてくれます(bash 5.2 での結果)。

set -o noclobber
echo "important" > nc.txt
> nc.txt
bash: nc.txt: cannot overwrite existing file

リダイレクトの詳しい使い分けは別の話題になるので、ここでは「既存ファイルを残したいなら touch、空にしたいなら : >」と押さえておけば十分です。

エラーを再現して原因と直し方を確かめる

エラー早見表

エラーメッセージ 主な原因 直し方
mkdir: cannot create directory ‘app’: File exists 同じ名前のディレクトリ(またはファイル)が既にある mkdir -p にする/別名にする/ls -ld で確かめる
mkdir: cannot create directory ‘a/b/c’: No such file or directory 途中の親ディレクトリが無い mkdir -p a/b/c
touch: cannot touch 'nodir/x.txt': No such file or directory 親ディレクトリが無い mkdir -p nodir && touch nodir/x.txt
mkdir: cannot create directory ‘locked/sub’: Permission denied 親ディレクトリに書き込み権限が無い 権限を確かめ、自分のホーム配下で作る/管理者に権限を依頼/sudo
touch: cannot touch 'f': Permission denied 親ディレクトリまたは対象ファイルに書き込めない 同上
mkdir: cannot create directory ‘memo.txt’: Not a directory パスの途中が通常ファイルになっている パスを見直す
File name too long 1つの名前が 255 バイトを超えている 名前を短くする
touch: invalid date format -d・-t の日時の書き方が合っていない 書式を確かめる

File exists(既にある)

mkdir app
mkdir app
mkdir: cannot create directory ‘app’: File exists

2回目は終了ステータスが 1 になります。「あっても無くてもよい」なら mkdir -p app にすると、エラーなしで通ります。

同じ名前の「通常ファイル」があるときも、同じメッセージになります。

touch memo.txt
mkdir memo.txt
mkdir: cannot create directory ‘memo.txt’: File exists

この場合は -p を付けても作れません。ls -ld memo.txt で先頭が -(通常ファイル)か d(ディレクトリ)かを確かめ、別の名前を選びます。その下に作ろうとすると、メッセージが変わります。

mkdir -p memo.txt/sub
mkdir: cannot create directory ‘memo.txt’: Not a directory

No such file or directory(親が無い)

mkdir app/src/main/java
touch nodir/x.txt
mkdir: cannot create directory ‘app/src/main/java’: No such file or directory
touch: cannot touch 'nodir/x.txt': No such file or directory

どちらも「途中のディレクトリがまだ無い」ことが原因です。直し方は次のとおりです。

mkdir -p app/src/main/java
mkdir -p nodir && touch nodir/x.txt
ls nodir
x.txt

パスの打ち間違い(srv と src など)でも同じエラーになります。ls で1階層ずつ確かめると、どこから先が無いのかがわかります。

Permission denied(権限が無い)

root が持ち主で、ほかのユーザーには書き込み権限が無いディレクトリ(755)を用意し、一般ユーザー(nobody)として作成を試しました。

ls -ld locked
setpriv --reuid=65534 --regid=65534 --clear-groups mkdir locked/sub
setpriv --reuid=65534 --regid=65534 --clear-groups touch locked/f.txt
drwxr-xr-x 2 root root 4096 Oct  3 00:55 locked
mkdir: cannot create directory ‘locked/sub’: Permission denied
touch: cannot touch 'locked/f.txt': Permission denied

ディレクトリやファイルを新しく作るには、「親ディレクトリ」への書き込み権限(w)と実行権限(x)が必要です。 上の例では、locked の権限が rwxr-xr-x で、持ち主(root)以外には w がありません。

確かめる順番は次の3つです。

順番 確かめること コマンド
1 自分は誰か whoami / id
2 親ディレクトリの持ち主と権限 ls -ld 親ディレクトリ
3 作る場所を見直す 自分のホーム(~)や /tmp の下で作れるか

システムの領域(/etc、/var、/opt など)に作る必要がある場合は、sudo mkdir -p /opt/myapp のように管理者権限で実行し、必要に応じて sudo chown で持ち主を自分に変えます。

既にあるファイルの時刻を変えるだけの場合も、持ち主でなく書き込み権限も無ければ同じエラーになります。

setpriv --reuid=65534 --regid=65534 --clear-groups touch data.txt
touch: cannot touch 'data.txt': Permission denied

File name too long(名前が長い)

mkdir -p /tmp/t179long/$(printf "a%.0s" {1..300})
mkdir: cannot create directory ‘/tmp/t179long/aaaa…(300文字)’: File name too long

(出力のうち、300文字ぶんの名前は省略して載せています。)Linux の多くのファイルシステムでは、1つの名前は 255 バイトまでです。日本語(UTF-8)は1文字3バイトが多いので、85文字前後が目安になります。

Linux(GNU)とmacOS(BSD)の違い

macOS の mkdir・touch は BSD 由来で、GNU 版とはオプションに少し差があります。下の表の macOS 列は、今回は手元で実行していません(未実行)。一般に知られた仕様として整理したものなので、使う前に man mkdir・man touch で確かめてください。

項目 Linux(GNU coreutils 9.4・実行済み) macOS(BSD・未実行)
mkdir -p / -m / -v 使える 使える
長いオプション(--parents など) 使える 使えない(短い形式で書く)
mkdir -Z(SELinux) 使える 無い
touch -a / -m / -c / -r / -t / -h 使える 使える
touch -d "yesterday" など相対表現 使える 使えない(-d は YYYY-MM-DDThh:mm:SS 形式)
touch --no-create など長い形式 使える 使えない
時刻をずらす touch -A 無い ある([-][[hh]mm]SS で調整)
時刻の確認 stat -c "%y" 使える 書式が違う(stat -f "%Sm")
ls --time-style=long-iso 使える 無い(ls -lT で秒まで表示)
install -D 使える 無い(mkdir -p と touch を使う)
tree パッケージで追加(apt install tree) Homebrew などで追加
ブレース展開 bash・zsh とも使える zsh(標準)・bash とも使える

両方で動かしたいスクリプトは、短いオプションだけを使い、日時指定は touch -t にそろえると書き分けが要らなくなります。

よくある質問

Q. mkdir -p は、既にあるディレクトリの中身を消しますか? A. 消しません。既にある場合は何もせず、終了ステータス 0 で終わります。中のファイルも権限もそのままです。-m を一緒に付けていても、既存ディレクトリの権限は変わりません。

Q. touch で作ったファイルに実行権限が付かないのはなぜですか? A. 通常ファイルは「666 から umask を引いた権限」で作られるためです。umask が 022 なら 644(rw-r--r--)になります。スクリプトとして実行したいときは、作成後に chmod +x ファイル名 を実行します。

Q. mkdir と touch を間違えて、ファイルにしたい名前でディレクトリを作ってしまいました。 A. 空のディレクトリなら rmdir 名前 で消してから touch 名前 で作り直せます。rmdir は中身があると消さないので、うっかり中身ごと消す心配がありません。中身があるディレクトリに実行すると rmdir: failed to remove 'ne': Directory not empty と表示されて止まることを確かめました。

Q. 空ファイルは何に使うのですか? A. 目印として置く使い方が多くあります。空ディレクトリを Git に残すための .gitkeep、処理の完了を知らせるフラグファイル、Python のパッケージを示す __init__.py、これから書き込むログや設定のひな形などです。

まとめ

  • mkdir -p は親ごと作り、既にあってもエラーにならない。 スクリプトの「無ければ作る」はこれ1行で書ける
  • -v で作成結果を表示、-m で権限を指定。 -p -m の権限は最後のディレクトリだけに付く
  • ブレース展開 {a,b}・{01..03} で一括作成。 カンマの前後に空白を入れない
  • touch は時刻を更新するコマンド。 無ければ空で作り、あれば中身を残す。-c で新規作成を止められる
  • 時刻の指定は -d(文字列)・-t(数字)・-r(別ファイルに合わせる)。 ctime は指定できない
  • 階層ごとファイルを作るなら mkdir -p "$(dirname "$f")" && touch "$f"。
  • >・: > は既存の中身を空にする。 残したいなら touch、空にしたいなら : >

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「Linux mkdir・touchの使い方|-pで階層作成と空ファイル作成」

株式会社RJCでは、mkdirやtouchのような基本コマンドの使い方を仲間と学び合っています。こうした知識を共有しながら、日々技術を磨いています。

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?