さまざまな方法を検索して試しても正しく機能しません。
多数のファイル(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
)。