0

我有两个目录,foo 和 bar。两者都包含相同数量的文件。我希望将 foo 中的所有文件重命名为与 bar 中的文件相同。这意味着 foo 中的第一个文件将被重命名为 bar 中的第一个文件,foo 中的第二个文件将重命名为 bar 中的第二个文件,等等。

因此,为了清楚起见,重命名过程“ls /path/to/foo”应该产生与“ls /path/to/bar”相同的输出。尽管 foo 和 bar 中所有文件的实际内容当然不会改变。

(请注意,所有文件都属于同一类型,并且有些(但不是全部)包含空格。)

提前致谢!

4

1 回答 1

1

由于您使用bash的是 ,因此秘诀在于谨慎使用数组(和双引号):

x=( /path/to/foo/* )
y=( /path/to/bar/* )

i=0
while [ $i -lt ${#x[@]} ]
do
    base="${y[$i]##*/}"
    mv "${x[$i]}" /path/to/foo/"$base"
    ((i++))
done
于 2013-05-16T02:11:12.683 回答