
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 1
xargs
検索する改行で区切られた引数を渡すオプションです。
-I @
オプションは、この場合に@
呼び出されるユーティリティにトラップされる可能性のあるシンボルの引数を圧縮します。具体的には、オプションはname.listから読み取られた各行のシンボルで変更されます。xargs
find
-path
find
@