友人が古いデータ(約200GB)をアーカイブするのを手伝う必要があります。彼が持っている新しいアーカイブには多くのファイルがすでに存在していることがわかりますが、新しいアーカイブはディレクトリ内で適切に編成されています。だから私は単に使用することはできませんrsync
。
私の質問は、新しいアーカイブに存在しないファイルのみのリストを簡単に取得する方法です。
例えば:
$ files_not_present old_dir new_dir
file1
file2
...
友人が古いデータ(約200GB)をアーカイブするのを手伝う必要があります。彼が持っている新しいアーカイブには多くのファイルがすでに存在していることがわかりますが、新しいアーカイブはディレクトリ内で適切に編成されています。だから私は単に使用することはできませんrsync
。
私の質問は、新しいアーカイブに存在しないファイルのみのリストを簡単に取得する方法です。
例えば:
$ files_not_present old_dir new_dir
file1
file2
...
回答:
古いアーカイブフォルダーがold_folderで、新しいアーカイブがnew_folderであるとしましょう
次の行を使用して、2つのフォルダーを比較し、new_folderで使用できないold_folderのファイルをリストできます。
for %%i in ("old_folder\*") do if not exist "new_folder\%%~nxi" echo(%%~i)>file.csv
お役に立てれば!
cmd
コマンドのように見えます。私が置かれているlinux
質問にタグを。答えてくれてありがとう、でも助けにはならない。
私が理解しているように、ファイルは同じ名前を持っていますが、それらは異なるサブフォルダーに存在することができます。スクリプトから始めて、ニーズに合わせて開発できます。
#!/bin/sh
[ -d "$1" -a -d "$2" ] || exit
old_dir="$1"
new_dir="$2"
find "$old_dir/" -type f -exec basename {} \; | sort > oldlist.txt
find "$old_dir/" -type f -exec basename {} \; | sort > newlist.txt
diff oldlist.txt newlist.txt | grep '<'
このスクリプトを実行します:
./script.sh old_dir new_dir
これは、すべてのファイル名(フォルダー名をでストリップbasename
)を検索し、リストをソートしてで比較するという考え方ですdiff
。ファイルリストは、のままになりますoldlist.txt
し、newlist.txt
ファイル。
diff -r
気にしなければ、ユーザーを確保できます。
/
シンボルが生成されるべきではありません)ので、配置されるサブフォルダーファイルに違いはありません。それとも別の意味ですか?
以下のこのいハックを見ないでください。もう一度これを行う必要がある場合は、要点をより便利に更新します:https : //gist.github.com/akostadinov/4cda59f17c450f64bbd6
以下の無駄なもの:
わかりました、誰かがそれを必要とする場合、私はこのアプローチを使用しました:
新しいアーカイブと古いアーカイブのファイルのリストを取得します。
$ find new_dir -type f > arch.txt
$ find old_dir -type f > arch_old.txt
ところでfind -name ".?*" -prune -o -type f
、隠しファイルを避けるために使用できます
このruby
スクリプトを使用して、新しいアーカイブナットではなく古いアーカイブナットに存在するファイルのリストを取得します。
org_arch = "arch.txt"
to_arch = "arch_old.txt"
# populate Hash with files under question to archive
arch={}
File.open(to_arch, "r") do |infile|
while (line = infile.gets)
arch[File.basename(line)] = line
end
end
# remove from Hash what has already been archived
File.open(org_arch, "r") do |infile|
while (path = infile.gets)
arch.delete(File.basename(path))
end
end
#print files to be archived
arch.each { |name,path|
puts path
}
コピーする必要があるファイルのサイズを確認します。
cat to_arch.txt | xargs -d "\n" stat -c "%s" | awk '{size+=$1} END {print size}'
私の場合、200GBから約80GBになりました。これが誰かの助けになることを願っています。