可以使用find
命令-exec
和{}
功能,所以你並不需要在所有的任何管道:「」
find -maxdepth 1 -type d -name "*.y" -mtime +`expr 2 \* 365` -exec mv "{}" "{}.old" \;
而且你不需要指定路徑 - 這是find
的默認值。並且您在"*.y"
中使用了額外的斜線。當然,如果你的文件名不包含引號。
公平地說,應該指出,while read
循環的版本是這裏提出的最快的。下面是一些例子測量:
$ cat measure
#!/bin/sh
case $2 in
1) find "$1" -print0 | xargs -0 -I file echo mv file file.old ;;
2) find "$1" -exec echo mv '{}' '{}.old' \; ;;
3) find "$1" | while read file; do
echo mv "$file" "$file.old"
done;;
esac
$ time ./measure android-ndk-r5c 1 | wc
6225 18675 955493
real 0m6.585s
user 0m18.933s
sys 0m4.476s
$ time ./measure android-ndk-r5c 2 | wc
6225 18675 955493
real 0m6.877s
user 0m18.517s
sys 0m4.788s
$ time ./measure android-ndk-r5c 3 | wc
6225 18675 955493
real 0m0.262s
user 0m0.088s
sys 0m0.236s
我想這是因爲find
和xargs
調用額外的/ bin/sh的(實際上exec(3)
做的話)的執行命令每一次,而外殼while
循環沒有。
UPD:如果你的busybox版本沒有-exec
選項支持編爲find
命令則while
循環或xargs
,在其他的答案(one,two)建議,是你的方式。
什麼是「關於?」這將告訴查找列表完全稱爲「* .y」的文件(引號將被傳遞給find,而*將被shell擴展,它將找不到任何東西並通過無論如何),我懷疑存在。 – 2012-01-06 14:39:31
busybox的各種編譯時選項包括CONFIG_FEATURE_FIND_PRINT0,CONFIG_FEATURE_FIND_EXEC,CONFIG_FEATURE_FIND_EXEC_PLUS,這些方法將會或不會工作,具體取決於* your * copy的編譯細節。 – 2015-12-18 15:36:58