我需要做的触摸的多个文件在相反的字母顺序的目录中,以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 )
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top