teratail header banner
teratail header banner
質問するログイン新規登録

質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.30%
Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

1回答

3885閲覧

rsync が、期待通りの動作をしない

k.oh

総合スコア1

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2021/08/29 06:55

編集2021/08/29 07:01

0

0

##実現したいこと
"/from_dir" に、1万枚程度の画像ファイルがあり、
"/from_dir" から抜き出したい画像ファイルの、"一部の名称"が含まれるリスト"list.csv"があります。

"rsync --include-from"を用い、リストに該当するファイルを、
"/dest_dir" にコピーをしようとしています。

!rsync -v -r --include-from=/pass_filelist/list.csv --exclude="*" /from_dir /dest_dir

しかし、下記のようにファイルが一つもコピーできません。

sending incremental file list sent 32 bytes received 12 bytes 17.60 bytes/sec total size is 0 speedup is 0.00

どのようにしたら、正常にファイルはコピーできるのか、
お知恵をお借りすることは可能でしょうか。

初学者のため、的外れな質問でありましたら、
申し訳ございません。

##参考情報
###作業環境
Google Colab上に、Google Driveをマウントし作業を行っています。

試したこと

--file-from オプションの利用 => ファイルリスト上でファイルパスが指定されている必要があり、使えませんでした。
--exclude="*" オプションを外す => コピー元ディレクトリのデータが、全てコピーされてしまいました。

補足

"from_dir" に、"list.csv"に記載されているファイルがあることは確認済みです。

###ファイルリストの内容(一部抜粋)

/pass_filelist# cat list.csv 8777741948_ab388c82a2_o.jpg 8712072786_80fb355fc3_o.jpg 9233119513_cb54e53ed3_o.jpg 9117652562_a61f10ab1d_o.jpg 8520280680_088ff11aa4_o.jpg 8916303530_0056b3dc12_o.jpg 10559011795_b857bedd81_o.jpg 8519149173_e53fda36b4_o.jpg 8277549377_903b5be21d_o.jpg 9117700880_11d2e20bdf_o.jpg ...

###コピー元ディレクトリの状況(一部抜粋)

/from_dir# ls landmark_aligned_face.4.11166878393_a73f2d943e_o.jpg landmark_aligned_face.4.11267890423_0b9ab21abe_o.jpg landmark_aligned_face.4.11274035183_87a488a01f_o.jpg landmark_aligned_face.4.11324700354_0b2546ff42_o.jpg landmark_aligned_face.4.11324792883_0185d0f976_o.jpg landmark_aligned_face.4.11328991245_7833afd2bb_o.jpg landmark_aligned_face.4.11329163373_691fbdb9c1_o.jpg ...

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

抜き出したい画像ファイルの、"一部の名称"が含まれるリスト

それはつまり、対象のファイル名 xxxxyyyy.jpg に対して yyyy.jpg の部分だけをリストに登録している、と。そういう状態を指すでしょうか。

rsyncで言っている include-pattern はそれでは受け付けてくれません。
xxxxyyyy.jpg を対象にしたければ、ファイル名そのまま xxxxyyyy.jpg と書くか、ワイルドカードで *yyyy.jpg のように書くか ( この場合 zzzzyyyy.jpg も対象になるなど、受けが広くなる点に注意が必要です )、そういった対処が必要です。

一番単純な対処としては、その list.csv というファイルの行頭全部に * を追加してワイルドカード込みパターンに変えてしまう、ということかと思います。
※まずはごく少数のファイル名パターンだけ登録して試してみてください。

ファイルをいじりたくないなら、
rsync -v -r --include-from=/pass_filelist/list.csv --exclude="*" /from_dir /dest_dir
の代わりに
rsync -v -r --include-from=<( sed 's/^/*/' /pass_filelist/list.csv ) --exclude="*" /from_dir /dest_dir
と、シェルのプロセス置換(bash,zshを想定)を活用して、一時的に「行頭全部に * を追加したリスト」を作り出して読み込ませるような方法も取れます。

投稿2021/08/29 08:30

angel_p_57

総合スコア1681

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k.oh

2021/09/27 10:55

ご回答ありがとうございます。 おかげさまで期待した動作を実装できました。大変助かりました。 rsyncで読み込むFileListはファイル名の全てを含んでいる必要があること。 シェルのプロセス置換を利用して、一時的に行頭全部にに * を追加したリストを作成・読み込ませることができること。 大変勉強になりました。重ねて御礼申し上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問