これは私のファイルで、出力は次のようになります。ll | awk '{print $9}'
thread_dump_10-10-22_10:00:01*
thread_dump_10-10-22_10:05:01*
thread_dump_10-10-22_10:10:01*
thread_dump_10-10-22_10:15:01*
thread_dump_10-10-22_10:20:01*
thread_dump_10-10-22_10:25:01*
thread_dump_10-10-22_10:30:01*
thread_dump_10-10-22_10:35:01*
thread_dump_10-10-22_10:40:01*
thread_dump_10-10-22_10:45:01*
thread_dump_10-10-22_10:50:01*
thread_dump_10-10-22_10:55:01*
thread_dump_10-10-22_11:00:01*
thread_dump_10-10-22_11:05:01*
thread_dump_10-10-22_11:10:01*
thread_dump_10-10-22_11:15:01*
thread_dump_10-10-22_11:20:01*
thread_dump_10-10-22_11:25:01*
thread_dump_10-10-22_11:30:01*
thread_dump_10-10-22_11:35:01*
thread_dump_10-10-22_11:40:01*
thread_dump_10-10-22_11:45:01*
thread_dump_10-10-22_11:50:01*
thread_dump_10-10-22_11:55:01*
thread_dump_10-10-22_12:00:01*
thread_dump_10-10-22_12:05:01*
thread_dump_10-10-22_12:10:01*
thread_dump_10-10-22_12:15:01*
thread_dump_10-10-22_12:20:01*
thread_dump_10-10-22_12:25:01*
thread_dump_10-10-22_12:30:01*
thread_dump_10-10-22_12:35:01*
thread_dump_10-10-22_12:40:01*
thread_dump_10-10-22_12:45:01*
thread_dump_10-10-22_12:50:01*
thread_dump_10-10-22_12:55:01*
私の問題は、11時30分から12時30分の間にファイルを特定のフォルダにコピーすることです。ソース:/home/Downloads/thread_dumps
宛先:/home/test
答え1
コマンドを使用find
し、すべてのファイルが同じパターン(時間で終わる)に従うとします。
find /home/Downloads/thread_dumps \( -name '*11:[3-5][0-9]:*' -o -name '*12:[0-2][0-9]:*' -o -name '*12:30:[0-5][0-9]*' \) -exec cp --target-directory=/home/test {} +
上記のコマンドはファイルをコピーします。12:30:??
(時間が12:31以上の場合、ファイルは考慮されません。)
ファイルが必要ない場合は、次の12:30
コマンドfind
を使用する必要があります。
find /home/Downloads/thread_dumps \( -name '*11:[3-5][0-9]:*' -o -name '*12:[0-2][0-9]:*' \) -exec cp --target-directory=/home/test {} +
答え2
grep
Shell globでは、他のコマンドに頼らずに必要なものを入手できますfind
。これには、タイムスタンプが12:30のファイルが含まれます。
cp /home/Downloads/thread_dumps/thread_dump_10-10-22_11:[345]* \
/home/Downloads/thread_dumps/thread_dump_10-10-22_12:[012]* \
/home/Downloads/thread_dumps/thread_dump_10-10-22_12:30* \
/home/test
ちなみにここで最後*
はワイルドカード*
そしてそれはあなたのファイルが持っているように見えるものとは何の関係もありません。
答え3
単にこのファイルをコピーすると、一致するシェルグローブが作成されます。
cp /home/Downloads/thread_dumps/thread_dump_10-10-22_11:[345]?:?? /home/test
cp /home/Downloads/thread_dumps/thread_dump_10-10-22_12:[12]?:?? /home/test
cp /home/Downloads/thread_dumps/thread_dump_10-10-22_12:30:00 /home/test
3つのコマンドにまとめましたが、必要に応じて、3つのソースパターンをすべて同じcp
コマンドに入れることができます。 3つの個別の引数に直接入れることも、中{x,y,z}
括弧拡張を使用して結合することもできます。ここでやったように:
# Assuming `bash` or `ksh`
cp /home/Downloads/thread_dumps/thread_dump_10-10-22_{11:[345]?:??,12:[12]?:??,12:30:00} /home/test
12:30ファイルを含めない場合は、3番目のコマンド(またはパターン)を省略してください。
この[...]
コンポーネントは含まれている文字と一致します。?
単一文字と一致します。 (おそらく*
ゼロ文字以上の一致に最も慣れているでしょう。)
答え4
そしてzsh
:
cp thread_dump_10-10-22_??:??:??(e['
[[ $REPLY[-8,-1] > 11:30 && REPLY[-8,-1] < 12:31 ]]']) /home/test
これはe
glob修飾子を使用していくつかのコードの評価に基づいてファイルを選択しますe
(考慮するファイルは変数にあります$REPLY
)。ここでは、ファイル名の最後の8文字を文字列比較して11:30:00から12:30:59までで終わるファイルを選択します。