私のファイル構造は次のとおりです。
My_Files:
|-- Folder_1:
| |-- a.txt
| |-- b.txt
| |-- c.txt
|
|-- Folder_2:
|-- a.txt
|-- b.txt
そのようなフォルダは約200個あります。
私が望むもの:
私のファイルをコピーし、同じ名前のファイル名を次のフォルダに変更したいと思います。
Final_Folder:
|-- a.txt
|-- b.txt
|-- c.txt
|-- a1.txt (Renamed)
|-- b1.txt (Renamed)
私がしたこと:
このコマンドを使用しましたが、結果が見つかりませんでした。
find My_Files/ -type f -print0 | xargs -0 cp -t Final_Folder/
出力は次のとおりです。
cp: 作成したばかりの「Folder_1/a.txt」を「Final_Folder/a.txt」で上書きしません。
cp: 作成したばかりの「Folder_1/b.txt」を「Final_Folder/b.txt」で上書きしません。
cp: 作成したばかりの「Folder_1/c.txt」を「Final_Folder/c.txt」で上書きしません。
cp: 作成したばかりの「Folder_2/a.txt」を「Final_Folder/a.txt」で上書きしません。
cp: 作成したばかりの「Folder_2/b.txt」を「Final_Folder/b.txt」で上書きしません。
私の目標をどのように達成できますか?
よろしくお願いします。
答え1
シナリオを考慮してFolder 1, Folder 2, Folder 3 etc.
実際に意味があると仮定すると(そうでない場合は、問題を回避するためにすべてのファイル名に現在のタイムスタンプを追加できます)Final_Folder
、
find . -path ./Final_Folder -prune -o -type f -exec sh -c 'fn=$(basename -- {}) ; suffix=$(dirname {} | tr / _ ) ; cp {} ./Final_Folder/${fn%.*}$suffix.${fn##*.}; ' \;
ファイル命名方式は、次の方式に従います。
[basename filename]._[basepath folder 1]_[basepath folder2]_[basepath folder[3..n].[extension]
つまり、Final_Folderのコンテンツは次のようになります。
a._Folder_1.txt
a._Folder_2.txt
a._Folder_3.txt
b._Folder_1.txt
b._Folder_2.txt
b._Folder_3.txt
c._Folder_1.txt
c._Folder_2.txt
c._Folder_3.txt
このシナリオの良い点は、階層が次のようになることです。
[YEAR]/[MONTH]/[DAY]/[filename a,b,c].txt
データを収集するときによくあるように
最上位ディレクトリで上記のコマンドを実行すると、今日コピーしたファイルのFinal_Folder
名前は「
a._2019_11_10.txt
b._2019_11_10.txt
c._2019_11_10.txt
.
.
.
[a,b,c]._2019_11_10.[WITH OTHER EXTENSIONS]
特定のタイプ、名前、または特定の年、月、日付などのファイルをソート、抽出、または分析することは非常に単純な問題です。