在bash中可以交换两个文件吗?
或者,可以用比这个更短的方式交换它们:
cp old tmp
cp curr old
cp tmp curr
rm tmp发布于 2014-06-29 01:59:29
我在我交付的工作脚本中有这一点。它是作为一个函数编写的,但您需要调用它
d_swap lfile rfileGNU mv具有-b和-T开关。您可以使用-T开关处理目录。
引号用于带有空格的文件名。
它有点冗长,但我已经在文件和目录中多次使用过它。在某些情况下,您可能希望使用目录的名称重命名文件,但此函数不会处理此问题。
如果您想要做的只是重命名文件(让它们保持原样),那么这样做的效率不是很高,这最好使用shell变量来完成。
d_swap() {
 test $# -eq 2 || return 2
 test -e "$1" || return 3
 test -e "$2" || return 3
 if [ -f "$1" -a -f "$2" ]
 then
    mv -b "$1" "$2" && mv "$2"~ "$1"
    return 0
 fi
 if [ -d "$1" -a -d "$2" ]
 then
    mv -T -b "$1" "$2" && mv -T "$2"~ "$1"
    return 0
 fi
 return 4
}此函数将重命名文件。它使用一个临时名称(它用一个点'.‘在名称前面),以防文件/目录在同一目录中,这通常是这种情况。
d_swapnames() {
    test $# -eq 2 || return 2
    test -e "$1" || return 3
    test -e "$2" || return 3
    local lname="$(basename "$1")"
    local rname="$(basename "$2")"
    ( cd "$(dirname "$1")" && mv -T "$lname" ".${rname}" ) && \
    ( cd "$(dirname "$2")" && mv -T "$rname" "$lname" ) && \
    ( cd "$(dirname "$1")" && mv -T ".${rname}" "$rname" )
}这要快得多(不需要复制,只需要重命名)。它甚至更丑陋。它将重命名任何东西:文件、目录、管道、设备。
https://stackoverflow.com/questions/1115904
复制相似问题