遅延してZ-> Aからファイルをタッチします
質問
私は1秒遅れで、逆のアルファベット順にディレクトリ内のいくつかのファイルのタッチを行う必要があります。これらのファイルは、名前にスペースを持っています。
:私はこれを試してみました
ls | sort -r | tr '\012' '\000' | xargs -0 touch
これます:
#!/bin/bash
for i in $(ls -r);
do
touch "$i"
sleep 1
done
が、最初はそれがあまりにも迅速になり、私は(私のデバイスに順番に表示されるファイルに)欲しいものを取得していない、第二にスペースを処理しない右ます。
任意のアイデア?
編集:申し訳ありませんが、より速く、可能な限りこれを行うには素晴らしいことだろうと追加するのを忘れ、「原因私はファイル間の1秒を待たなければならない、と私は60個の以上のファイルがある場合、私はより多くのを待ちたくありません1分未満。トラブルのため申し訳ありません。
解決 3
最後に、私はこれを使用します:
#!/bin/bash
(OFFSET_IN_SEC=0
IFS=$'\n'
# for each file in reverse alphabetic order
for file in $(ls -r); do
# offset in seconds from current time
OFFSET_IN_SEC=$(( $OFFSET_IN_SEC + 1 ))
# current time + $OFFSET_IN_SEC in format used by touch command
TOUCH_TIMESTAMP=$(date -d "$OFFSET_IN_SEC sec" +%m%d%H%M.%S)
# touch me :)
# NOTE: quotes around $file are for handling spaces
touch -t $TOUCH_TIMESTAMP "$file"
done)
私は$ファイルの前後に引用符がうまくスペースを処理しないように、IFSの設定を含めるように持っていた。
おかげで、すべて!!!
他のヒント
read
は一度ラインに読み込みます。
ls -r | while read FILE; do
touch "$FILE"
sleep 1
done
またのみ$IFS
構文で別のアイテムではなく、スペースやタブを改行文字がように、あなたはfor i in list
変数と周りの混乱でします:
(IFS=$'\n'
for FILE in $(ls -r); do
touch "$FILE"
sleep 1
done)
(括弧は$IFS
が、その後回復したので追加しました。あなたは忘れて、それが非標準値に設定したままならばThings'll可能性が高いバナナを行く。)
ところで、あなたはまた、特定のタイムスタンプを設定するtouch -t
を使用してスリープをスキップすることができます。それはしかし、行うことはかなりより困難になりそうだので、私はより冒険レスポンダに残しておきましょう。 : - )
別のbashのソリューション:
#!/bin/bash
OFFSET_IN_SEC=0
# for each file in reverse alphabetic order
for file in (ls -r); do
# offset in seconds from current time
OFFSET_IN_SEC=$(( $OFFSET_IN_SEC + 1 ))
# current time + $OFFSET_IN_SEC in format used by touch command
TOUCH_TIMESTAMP=$(date -d "$OFFSET_IN_SEC sec" +%m%d%H%M.%S)
# touch me :)
# NOTE: quotes around $file are for handling spaces
touch -t $TOUCH_TIMESTAMP "$file"
done
これは私のために動作します:
while read ; do
[ -d "$REPLY" ] || touch "$REPLY"
sleep 1
done < <( find . -maxdepth 1 | sort -r )