フォルダ内のすべてのファイルを別のフォルダにコピーし、ファイル名に 。

フォルダ内のすべてのファイルを別のフォルダにコピーし、ファイル名に 。

さまざまな方法を検索して試しても正しく機能しません。

多数のファイル(100,000を超えるファイル)を別のフォルダにコピーし、ファイル名の先頭にドットを追加する必要があります。

例:

  • /foo/bar/filename1.txt到着/foo2/bar/.filename1.txt
  • その後、元の名前に再度名前を変更します。/foo2/bar/filename.txt

これを行う必要があるのは、フォルダを検索し続け、/foo2/barファイル名の前にドット付きのファイルを無視してコピーしているファイルを処理しないアプリケーションがあるためです。これは主に、2つのフォルダが2つの異なるネットワークドライブまたは一部のマウントされたデバイスに配置される可能性があるためです。

多くのファイルを含むいくつかのフォルダがあり、引数リストが長すぎるエラーが発生するため、単にmvまたはcpを使用することはできません。だからfindコマンドを使ってみましたが、役に立ちませんでした。

別のコマンドを試してみてください。

find /foo/bar/ -type f -exec cp -t /foo2/bar {} +

そして

find /foo/bar/ -type f -exec mv {} /foo2/bar/.{} \;

私は上記の命令が私が望むことをしないことを知っており、それが私が疲れていたことです。

助けてくれる人に感謝します...

答え1

rsync -a -T tmpdir /foo/bar/ /foo2/bar

/(最後の内容が重要なので参考にしてください/foo/bar/。)

ユーティリティは、ファイルを正しい名前に移動する前にファイルに書き込みますrsync。たとえば、次の隠しディレクトリを使用して転送中のファイルを保存できます。tmpdir/foo2/bar/foo2/bar

mkdir -p /foo2/bar/.tmp
rsync -a -T /foo2/bar/.tmp /foo/bar/ /foo2/bar

またrsync、マニュアル、特にこのオプションのセクションも参照してください-T

上記のコマンドは再帰/foo/barをにコピーします/foo2/bar。再帰を無効にするには、次の方法を使用しますrsync -a --no-recursive ...(この-aオプションは、再帰とファイルのメタデータ同期を有効にし、再帰--no-recursion側のみをオフにします-a)。

関連情報