「mv * .*」の後にファイルを取り戻すにはどうすればいいですか?

「mv * .*」の後にファイルを取り戻すにはどうすればいいですか?

次のコマンドを使用していくつかのファイルを非表示にしました:

mv * .*

しかし、今はそれらを見つけることができません。私は以下を使ってみました:

mv .* *

しかし何も起こりませんでした(エラーが表示されました)。以下を実行すると、

ls -la

表示されています:

total 8  
drwxrwxr-x 2 abhishek abhishek 4096 Mar  9 20:46 .  
drwxrwxr-x 4 abhishek abhishek 4096 Mar  9 20:46 ..  

隠しファイルを復元する方法はありますか?

答え1

ファイルは非表示になっていません。すべてのファイル (およびディレクトリがある場合はディレクトリ) が 1 つ上のディレクトリに移動されています。

これは、mv * .*思った通りに動作しないために発生します。このコマンドは、mv1 つのファイルを 1 つのファイルに移動 (名前変更) するか、1 つまたは複数のファイルをディレクトリに移動するだけです。スマートな名前変更で複数のファイルを複数のファイルに移動するわけではありません。


どうしたの?

ディレクトリが 1 つあり、そのディレクトリ内に 3 つのファイルがあると仮定します。

dir1
file1
file2
file3

一部のシェル (例bash: dash、、...) では、コマンドが次のように展開されます。

mv dir1 file1 file2 file3 . ..

展開されたコマンドは、次の SYNOPSIS の 2 番目の形式に適合しますman mv

mv [OPTION]... SOURCE... DIRECTORY

.および に注意してください..:

  • .現在のディレクトリです。
  • ..1つ上のディレクトリです。

このコマンドは、、、およびを に移動することを意味しますdir1file1また、次file2のようなエラーも発生します。file3...

mv: cannot move '.' to '../.'

ただし、そのディレクトリへの書き込み権限がある場合、他のすべてのファイルは移動されています。ファイルは..(1 つ上のディレクトリ) にあります。ただし、同じ名前のファイルは上書きされているため、どのファイルがどのディレクトリにあったかはわかりません。


サブディレクトリがあった場合.hidden-dir、次のように展開されます。

mv dir1 file1 file2 file3 . .. .hidden-dir

その後、すべてのファイルは に移動されます。ただし、出力に.hidden-dirが表示されているため、これは当てはまらないようです。.hidden-dirls -la


直し方

走る:

mv ../dir1 ../file1 ../file2 ../file3 .

ただし、名前を知っておく必要があります。


使用すべきだったもの

mmv '*' '.#1'

または

rename 's/^/./' *

関連情報