入力リストと部分ファイルパスを使用したファイルの検索とコピー

入力リストと部分ファイルパスを使用したファイルの検索とコピー

names.list名前のみを含むファイル名のリストがあります。ファイルはシステム全体のさまざまなサブフォルダに分散されていますが、構造は通常次のとおりです。

uniquename/uniquename2/spades/filtered/filename

定数はspades/filtered

使った次のコマンドディレクトリからファイルを移動するとき

xargs -a file_list.txt cp -t /path/to/dest

使用中にこのスレッドが見つかりました。ワイルドカード/部分ファイル名S

find . -path \*content/docs/file.xml

こんな組み合わせしてみよう

find . -path \*spades/filtered/ | xargs -a names.list cp -t $HOME/destination/

ただし、次のエラーが発生します。

cp: cannot stat `filename': No such file or directory

tldr:入力された名前のリストと部分ファイルパスのみを使用してファイルをコピーしたいと思います。

答え1

ファイル名を繰り返し、検索パターンに追加してexecハンドルを使用してコピーします。

for i in $(<names.list)
do
    find . -path \*spades/filtered/"$i" -type f -exec cp -t "$HOME/destination/" {} \;;
done

編集する:Rakesh Sharmaの答えのおかげで、ループの本文を次のように置き換えます。

find . -mindepth 5 -maxdepth 5 -path "*/spades/filtered/$i" -type f -exec cp -t "$HOME/destination/" {} +;

スポンサー。

答え2

forループをキャンセルして次のことができますxargs

xargs -a names.list -L 1 -I @ find . -path \*/spades/filtered/@ -type f -exec cp -fpvt "$HOME/destination/" {} +

GNU xargs、find、およびcpユーティリティが使用されているとします。

-aファイル名は一度に1行ずつ読み取られます。

-L 1xargs検索する改行で区切られた引数を渡すオプションです。

-I @オプションは、この場合に@呼び出されるユーティリティにトラップされる可能性のあるシンボルの引数を圧縮します。具体的には、オプションはname.listから読み取られた各行のシンボルで変更されます。xargsfind-pathfind@

関連情報