ディレクトリにファイルのリストがあります/tmp/drop
。私の質問の基本要素を含めましたtest script zz.sh
。スクリプトの一部を取り、ここに投稿しました。リストされたファイルと行は次のとおりです。 whileループに提供されたときに変数にfile
ファイル名のみを割り当て、この行の他のさまざまな文字列を割り当てないようにするにはどうすればよいですか?
どんな助けでも大いに感謝し、他の人にも役立ちます。
machine001:/home/aaa999999> ls -l /tmp/drop | grep "2017-01-29" | egrep '\.gz$' | tail -10
+ ls -F -l /tmp/drop
+ tail -10
+ grep 2017-01-29
+ egrep \.gz$
-rw-r--r-- 1 user1001 user1001 20 Jan 29 2017 pattern101_worker-2_2017-01-29-21:33:13.888.complete.gz
-rw-r--r-- 1 user1001 user1001 20 Jan 29 2017 pattern101_worker-2_2017-01-29-21:48:14.632.complete.gz
-rw-r--r-- 1 user1001 user1001 20 Jan 29 2017 pattern101_worker-2_2017-01-29-22:03:19.098.complete.gz
-rw-r--r-- 1 user1001 user1001 20 Jan 29 2017 pattern101_worker-2_2017-01-29-22:18:19.416.complete.gz
-rw-r--r-- 1 user1001 user1001 20 Jan 29 2017 pattern101_worker-2_2017-01-29-22:33:19.878.complete.gz
-rw-r--r-- 1 user1001 user1001 20 Jan 29 2017 pattern101_worker-2_2017-01-29-22:48:25.636.complete.gz
-rw-r--r-- 1 user1001 user1001 20 Jan 29 2017 pattern101_worker-2_2017-01-29-23:03:26.515.complete.gz
-rw-r--r-- 1 user1001 user1001 20 Jan 29 2017 pattern101_worker-2_2017-01-29-23:18:28.279.complete.gz
-rw-r--r-- 1 user1001 user1001 20 Jan 29 2017 pattern101_worker-2_2017-01-29-23:33:33.059.complete.gz
-rw-r--r-- 1 user1001 user1001 20 Jan 29 2017 pattern101_worker-2_2017-01-29-23:48:33.841.complete.gz
machine001:/home/aaa999999> cat zz.sh
+ cat zz.sh
#!/bin/bash
set -x
DROP_DIR=/tmp/drop
ARCHIVE_DIR=/tmp/arch
YESTERDAY="2017-01-29"
# move from drop dir
ls -1 ${DROP_DIR} | grep ${YESTERDAY} | egrep '\.gz$' | while read file; do
mv ${DROP_DIR}/$file ${ARCHIVE_DIR}
echo 'File name is ' ${file}
done
ベストアンサー1
ls -1
ファイル名のみを印刷します。ls -l
また、他の多くのものを印刷します。もう1つは数字1、もう1つは小文字elです。
-1
出力がパイプにリダイレクトされている場合は、「単一列」モードが暗示されるため、ここではこれは必要ありません。
ls
しかし、実際にはここにパイプはまったく必要ありません。このループは次のように置き換えることができます。
for file in "$DROP_DIR/"*"$YESTERDAY"*.gz ; do
mv "$file" "$ARCHIVE_DIR"
echo "File name is ${file#$DROP_DIR/}"
done
また見なさい:L分析GregのBash Wikiにあります。