
ファイルディレクトリをコピーして別のディレクトリに貼り付けました。
現在の結果はこれです development\ /
それはどういう意味なのか分からない? Linuxはこれをディレクトリとして認識していません。
ディレクトリの所有者も間違っています。しかし、これをしようとすると、 chown -R zugul /development
結果は次のようになります。chown: cannot access `/development': No such file or directory
コピーしたディレクトリを貼り付けてみると、何か間違っているようです。この問題をどのように解決できますか?
答え1
ディレクトリ名にスペースがあるようです。
引用符を使用できます。
chown -R zugul "/development /"
または、エスケープ文字を使用できます。
chown -R zugul /development\ /
答え2
ディレクトリ名はスペースで終わります(通常はスペースでも、分割できないスペースなどの他のスペース文字でもあります)。に渡すls
オプションに応じて、\
ファイル名に存在するか、次の文字が文字通りファイル名の一部として解釈されることを意味します。
ディレクトリの名前を変更する必要があります。
mv /development\ /development
(2つの連続したスペースに注意してください。最初のスペースはファイル名の一部であり、前のバックスラッシュで引用され、2番目のスペースは2つの引数を区切ります。)
mv '/development ' /development
というディレクトリが既に存在する場合は、ファイルをそのディレクトリ/development
から移動し、名前が間違っているディレクトリ()を削除します。競合に注意してください(両方のファイルが存在します)。/development
/development
rmdir '/development '
命名問題を解決したら、所有権などの他の問題を処理できます。
答え3
chown
試してみると、ファイル名が正しくありませんchown -R zugul development\\\ /
。
答え4
文字が何であるかを推測するのではなく、特殊文字を参照するものを使用してください。私はこのアプローチが大好きです。
ls --quoting-style=shell-escape
これは実際に意味するものを示しています($''
ANSII Cエスケープを処理するbash / kshスタイル文字列を使用)。ボーナスとして、直接渡すことができる、またはchown
シェルで実行する必要がある他のすべての操作を渡すことができる事前引用符付き文字列を提供する必要があります。たとえば、以下は、名前に改行文字を含むファイルのls出力と、ls
前の引用符を使用した出力です。chgrp
rm
sauer@lightning:/tmp/test> ls -l
total 0
-rw-r--r-- 1 sauer users 0 Aug 14 17:04 a?file
sauer@lightning:/tmp/test> ls -l --quoting-style=shell-escape
total 0
-rw-r--r-- 1 sauer users 0 Aug 14 17:04 'a'$'\n''file'
sauer@lightning:/tmp/test> chgrp docker 'a'$'\n''file'
sauer@lightning:/tmp/test> ls -l --quoting-style=shell-escape
total 0
-rw-r--r-- 1 sauer docker 0 Aug 14 17:04 'a'$'\n''file'
sauer@lightning:/tmp/test> rm -v 'a'$'\n''file'
removed 'a'$'\n''file'
奇妙な文字のない名前にファイル名を変更することをお勧めします。 :)
sauer@lightning:/tmp/test> ls
a??file
sauer@lightning:/tmp/test> ls --quoting-style=shell-escape
'a'$'\t\033''file'
sauer@lightning:/tmp/test> mv -v 'a'$'\t\033''file' regular_filename
renamed 'a'$'\t\033''file' -> 'regular_filename'