themes.txt
さまざまなフォルダに名前が異なりますが、内容の異なるファイルがたくさん散在しています。
locate
(!!!ではありません)コマンドを使用してfind
検索し、cp -backup
コマンドを使用して名前付きフォルダにコピーしたいと思います/home/myhome/1
。
Linux Mint 20.3では可能ですか?そうでない場合、代替ソリューションはありますか?
答え1
オプション(NULで区切られた出力用)と(ファイルがまだ存在することを確認するための追加チェック)をlocate
サポートし、GNUとandのサポートがある場合(すべてLinux Mintの場合に該当する必要があります):-0
-e
cp
sort
xargs
-r
-0
LC_ALL=C locate -0e '*/themes.txt' |
LC_ALL=C sort -zV |
xargs -r0 cp -t ~/1 --backup=numbered
これはsort -V
、ファイルがコピーされるランダムではない順序(ここではバージョン順)を取得するためのものであり、これは必要ありません。
呼び出された正確なファイルをlocate -0e '*/themes.txt'
検索するには、これを行うこともできます。実装がはるかに高速であることがわかりました(代わりに使用できると手動で言及されていますが、少なくとも実装では機能しません)。themes.txt
locate -0be '[t]hemes.txt'
mlocate
mlocate
\themes.txt
'[t]hemes.txt
plocate
答え2
cp --backup=numbered $(locate themes.txt) /home/myhome/1
答え3
IMHO、locate
出力を解析する必要があるすべての操作の場合は、find
シェルループを使用するのが最善です。これは、部分的にはUnixファイル名の属性(改行文字を含めることができる)によるものであり、部分的には使用されたlocate
データベースが古くなっている可能性があるためです。
find
andを使用せずにlocate
これを行うことができますbash
。
shopt -s globstar
shopt -s nullglob dotglob
for pathname in ./**/themes.txt; do
cp -b "$pathname" ~/1/
done
**
これにより、最初にパス名内で一致する/
(したがってサブディレクトリに「繰り返し」)、一致するワイルドカードパターンを使用できます。その後、nullglob
一致しないパターンを削除し、隠されたdotglob
名前のパターン一致を許可できます。
このループは、移動したいすべての名前を繰り返して現在のディレクトリまたはサブディレクトリで一致させ、各名前cp -b
(同じ)を-b
ホームディレクトリの下に--backup
呼び出されたディレクトリにコピーします。1
これは、現在のディレクトリがホームディレクトリではないと仮定します。これは、ターゲットディレクトリのファイルが含まれるためです。
これらのファイルのほんの一部しかないことがわかっている場合は、themes.txt
次のコマンドを使用できます。
shopt -s globstar dotglob failglob
cp -b -t ~/1/ ./**/themes.txt
in を使用すると、一致する名前がないとfailglob
コマンドは正常に失敗します(パターンが名前と一致しない場合、シェルはコマンドを実行しようともしません)。nullglob
上記のコマンドは、一致する名前が実際に通常のファイルであるかどうかをテストしません(ディレクトリ、シンボリックリンク、または他の非正規ファイルである可能性があります)。これには、次のものを使用できます。
shopt -s globstar
shopt -s nullglob dotglob
for pathname in ./**/themes.txt; do
if [ -f "$pathname" ] && [ ! -L "$pathname" ]; then
cp -b "$pathname" ~/1/
fi
done
これは通常のファイルのみをコピーし、非正規ファイルと一般ファイルへのシンボリックリンクを防ぎます。
それでfind
あなたはしなければなりません
find . -name themes.txt -type f -exec cp -b -t ~/1/ {} +
つまり、現在のディレクトリまたは次のディレクトリのどこからでも、できるだけ多くの一般的なファイルをcp -b -t ~/1/
一度に呼び出します。themes.txt
これの利点は、cp
通話回数をできるだけ減らすことができることです。