名前にバックスラッシュ\を含むファイルを削除またはアクセスする方法は?

名前にバックスラッシュ\を含むファイルを削除またはアクセスする方法は?

私はPythonモジュールpysftpを使っていくつかのファイルをこのLinuxボックスにコピーしました。

[jm@spartan tf]$ ls -la
total 0
drwxrwxrwx. 3 jm jm  69 Aug 14 13:50 .
drwxrwxrwt. 9 root    root    238 Aug 14 13:49 ..
-rwxrwxrwx. 1 jm jm   0 Aug 14 13:49 .\gitkeep
drwxrwxrwx. 2 jm jm   6 Aug 14 13:50 .\innerfile
-rwxrwxrwx. 1 jm jm   0 Aug 14 13:50 .\innerfile\gitkeep
[jm@spartan tf]$ rm .\gitkeep
rm: cannot remove ‘.gitkeep’: No such file or directory

隠されていて、どのようにコピーして隠すことができるのか悩んでいますが、同時に削除したいのですが、それはできません。ここで何が起こっているのでしょうか?

CentOS 7を使用しています。

ベストアンサー1

実際にやるべきことは、WindowsパスをUnixパスに変換するようにスクリプトを変更することです。比較的簡単なアプローチは、パス区切り記号を方程式から除外することです。コピーするフルパス名を指定するのではなく、ディレクトリを再帰的に移動し、リモート側にターゲットディレクトリを作成してから、フルパスの代わりにファイル名のみを指定します。 :)

ただし、そのポイントに達する前に、シェルからバックスラッシュを保護する必要があります。一重引用符で引用します(バックスラッシュは二重引用符内の特定の文字として解釈されます)。特にワイルドカードは引用符の外にあるため、シェルはそれをリテラルではなくワイルドカードとして扱います*。 :)

rm -rv '.\'*

または、バックスラッシュをエスケープすることで実行できます(二重引用符内でも機能しますが、ここでは必要ありません)。

rm -rv .\\*

ワイルドカードを使用してエントリを削除する前に、必ず同じパラメータを使用して最初に実行し、ls上矢印を使用して 。 :) 私もこのような状況でwithを使用するのが大好きです。lsrm-vrm

sauer@lightning:/tmp> ls -vr .\\*
.\innerfile\gitkeep  .\gitkeep

.\innerfile:
sauer@lightning:/tmp> rm -vr .\\*
removed '.\gitkeep'
removed directory '.\innerfile'
removed '.\innerfile\gitkeep'

おすすめ記事