フォルダ構造を維持しながら、最後の日に変更されたファイルのみをコピーしてみてください。

フォルダ構造を維持しながら、最後の日に変更されたファイルのみをコピーしてみてください。

最近変更されたファイルを見つけてコピーしようとしています。これを実行しながら、その中に多くのサブディレクトリとデータファイルが保持されるようにしますdir1dir1

これまで私がまとめた内容は次のとおりです。ただし、mtimeファイルの内容が更新されると、ディレクトリの内容は更新されません。また、私はこのcpコマンドが変更されたファイルだけでなく、ディレクトリ内のすべてのファイルをコピーすると信じています。

find /NAS/data/dir1 -type d -mtime -1 -exec cp -at /mnt/databackup/dir1 {} +

それを使用すると、-type fフォルダ構造は維持されません。

ベストアンサー1

find ... -type fbash forループで使用できます。ループとmkdir -p組み合わせを使用すると、dirnamecpを使用して各ファイルをコピーする前にフォルダ構造を再作成できます。

#!/bin/bash

dirA="/NAS/data/dir1/"
dirB="/mnt/databackup/dir1/"
while read -r file
do
    relative="${file##"$dirA"}"
    newfile="$dirB$relative"
    echo mkdir -p "$(dirname "$file")"
    echo cp -at "$file" "$newfile"
done < <(find "$dirA" -type f -mtime -1)
  • readbash 組み込み機能です。通常、-rいくつかの極端な場合は問題を回避するために使用されます。 .txtファイルから一度に1行ずつ読みますstdin。ここで、これがstdin出力ですfind
  • ${var##string-to-remove}形式であるパラメータの置換
  • newfile="$dirB$relative"。これは古典的なbash接続です。
  • $()。このbash構成は次のとおりです。コマンドの置き換え
  • mkdir -p必要に応じてディレクトリとすべての親エントリを作成します。
  • cmd < fileこれは古典的なリダイレクトです。
  • <(cmd)これは…プロセスの交換。ファイル名をコマンドのstdin [ >()]またはstdout []のハンドルに変更します<()

あなたはできますexplainshell.comをご利用くださいより詳細な説明が必要です。

おすすめ記事