将目录中的所有文件重命名为另一个目录的文件

时间:2013-05-16 00:46:32

标签: linux bash gnu

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

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

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

提前致谢!

1 个答案:

答案 0 :(得分: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