重複の可能性:
Linuxはマルチパス区切り文字(/home////username///file)をどのように処理しますか?
/
Linuxで使用されるほとんどのコマンドは、ディレクトリ名の末尾に末尾のスラッシュ文字が含まれているかどうかにかかわらず、まったく同じように機能します。
たとえば、
ls /home/cklein
ls /home/cklein/
cp foo bar
cp foo/ bar/
この末尾のスラッシュはいつ重要ですか?末尾のスラッシュの意味は何ですか?
答え1
良い例は、ファイルをディレクトリに移動することです。
mv some_file foo
そして
mv some_file foo/
foo
最初のものは存在しないと名前が変更され、期待どおりにsome_file
変更されません。 2番目はまさにあなたが望むように文句を言います。foo
foo/some_file
foo
最初のファイルは存在しますが、ディレクトリではない場合、ファイルが破損する可能性があり、foo
2番目は文句を言います。
cp
同様の質問が提起されました。
/.
一部の以前のバージョンのSunOSでは、システムが実際に末尾のファイル名を無視したため、追加する習慣がありました/
。つまり、/etc/motd/
エラーの代わりにファイルが参照されます。 SunOS/Solaris の最新バージョンにはこの問題はないようです。
答え2
これは完全ツールによって異なります。rm
末尾のスラッシュがある場合、ディレクトリへのシンボリックリンクを削除することはできません。ソースファイルの仕様に末尾のスラッシュがある場合、rsyncは動作が異なります。
答え3
答え4
rsyncでは、マニュアルページは次のようになります。
A trailing slash on the source changes this behavior to avoid creating
an additional directory level at the destination. You can think of a
trailing / on a source as meaning "copy the contents of this directory"
as opposed to "copy the directory by name", but in both cases the
attributes of the containing directory are transferred to the contain-
ing directory on the destination. In other words, each of the follow-
ing commands copies the files in the same way, including their setting
of the attributes of /dest/foo:
rsync -av /src/foo /dest
rsync -av /src/foo/ /dest/foo
末尾のスラッシュ目的地まったく問題ではありません。ソースコードでのみ可能です。 (もちろん、ソースが単一ファイルまたはグローバル変数ではなくディレクトリである場合にのみ重要です。)
ディレクトリ間のユースケースの説明:
$ mkdir foo bar baz
$ chmod 700 foo
$ chmod 750 bar
$ chmod 705 baz
$ echo hello > foo/file1
$ chmod 606 foo/file1
$ ls -n
total 0
drwxr-x--- 2 501 20 68 Aug 8 15:29 bar/
drwx---r-x 2 501 20 68 Aug 8 15:29 baz/
drwx------ 3 501 20 102 Aug 8 15:30 foo/
$ ls -n foo
total 8
-rw----rw- 1 501 20 6 Aug 8 15:30 file1
$ rsync -a foo bar
$ rsync -a foo baz/
$ rsync -a foo bif
$ rsync -a foo bonk/
$ ls -n
total 0
drwxr-x--- 3 501 20 102 Aug 8 15:30 bar/
drwx---r-x 3 501 20 102 Aug 8 15:30 baz/
drwxr-xr-x 3 501 20 102 Aug 8 15:30 bif/
drwxr-xr-x 3 501 20 102 Aug 8 15:30 bonk/
drwx------ 3 501 20 102 Aug 8 15:30 foo/
$ ls -n *
bar:
total 0
drwx------ 3 501 20 102 Aug 8 15:30 foo/
baz:
total 0
drwx------ 3 501 20 102 Aug 8 15:30 foo/
bif:
total 0
drwx------ 3 501 20 102 Aug 8 15:30 foo/
bonk:
total 0
drwx------ 3 501 20 102 Aug 8 15:30 foo/
foo:
total 8
-rw----rw- 1 501 20 6 Aug 8 15:30 file1
$ rm -rf b*
$ mkdir bar baz
$ chmod 750 bar
$ chmod 705 baz
$ rsync -a foo/ bar
$ rsync -a foo/ baz/
$ rsync -a foo/ bif
$ rsync -a foo/ bonk/
$ ls -n
total 0
drwx------ 3 501 20 102 Aug 8 15:30 bar/
drwx------ 3 501 20 102 Aug 8 15:30 baz/
drwx------ 3 501 20 102 Aug 8 15:30 bif/
drwx------ 3 501 20 102 Aug 8 15:30 bonk/
drwx------ 3 501 20 102 Aug 8 15:30 foo/
$ ls -n *
bar:
total 8
-rw----rw- 1 501 20 6 Aug 8 15:30 file1
baz:
total 8
-rw----rw- 1 501 20 6 Aug 8 15:30 file1
bif:
total 8
-rw----rw- 1 501 20 6 Aug 8 15:30 file1
bonk:
total 8
-rw----rw- 1 501 20 6 Aug 8 15:30 file1
foo:
total 8
-rw----rw- 1 501 20 6 Aug 8 15:30 file1
$