题
我需要做的触摸的多个文件在相反的字母顺序的目录中,以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 )
不隶属于 StackOverflow