有一件事总是让我抓狂,那就是需要做
mv file1 tmp
mv file2 file1
mv tmp file2
为了交换两个文件名。
你们用什么来交换两个文件?有没有标准的交换脚本?类似这样的脚本sw file1 file2
就好了
答案1
建议添加bash
一个交换两个文件的功能:
nano .bashrc
粘贴至文件底部:
function swap()
{
if [ $# -ne 2 ]; then
echo "Usage: swap file1 file2"
else
local TMPFILE=$(mktemp)
mv "$1" $TMPFILE
mv "$2" "$1"
mv $TMPFILE "$2"
fi
}
注销/登录或运行:
source .bashrc
要交换两个文件,请运行:
swap x y
其中 x 和 y 是你的文件名
答案2
我建议使用 bash 脚本,而不是使用 bash.conf。
如果您要进入 Unix 系统,那么您将需要在某个时候学习 shell 脚本。
答案3
这个脚本做了两件事:
- 检查你是否错误地使用了错误数量的参数
- 检查两个参数是否都是文件(不要输入错误并使用目录或其他东西)。
如果这两项检查中的任何一项失败,它会告诉您如何运行脚本,否则您的文件将被交换。
#! /bin/sh
if [ ! $# = 2 -o ! -f $1 -o ! -f $2 ]
then
echo "Usage: `basename $0` file1 file2."
exit
fi
mv $1 cop_$1
mv $2 $1
mv cop_$1 $2
将其保存在您的家中,使用chmod +x <scriptname>.sh
使其可执行,/usr/bin/
使用命令将其移动到您的sudo cp <scriptname>.sh /usr/bin/
。
现在您可以用来<nameofthescrip> file1 file2
交换文件。
答案4
我同意 Bruno 的观点,shell 脚本更适合添加命令类型功能。我提供一些其他建议:
1- 对于用法,不要在消息末尾添加句点。您试图显示语法,而消息“用法:交换文件 1 文件 2。”可能具有误导性,它不是一个句子,应该只是说:“用法:交换文件 1 文件 2”
2- 将文件放在 /use/bin 中使其成为系统命令。虽然您的个人 Ubuntu 安装可能会容忍这种情况,但当您决定从头开始重新安装时,您会捕获主目录,而不是 /usr/bin。我建议您创建 $HOME/bin,将其添加到您的搜索路径,并将所有脚本放在该目录中。您的 bin 目录是您个人的附加命令宝库。
3-如果您将函数放在 bashrc 中,那么它仅在 bash shell 中可用,如果您希望无论使用哪个 shell 都可以使用 swap,那么 bin 目录中的 shell 脚本更加通用和标准。
4- 在脚本中,我建议将 Usage 输出后的退出改为“exit 1”,并在最后一行(第三个 mv 命令)后添加“exit 0”。退出代码表示成功或失败。如果您曾经编写过其他使用 swap 的脚本,他们可以检查退出代码以查看是成功还是失败。
5- 我建议使用 mktemp 函数,而不是 cop_$1(它假设文件 cop_ 不存在),使用 --tmpdir 选项它会在当前目录中创建临时文件。这样可以保证文件名不会冲突。
综上所述,我提出以下几点:
#!/bin/sh
if [ ! $# = 2 ] ; then
echo "Usage: `basename $0` file1 file2"
echo "Two file names are required."
exit 1
fi
if [ ! -f $1 -o ! -f $2 ] ; then
echo "Usage: `basename $0` file1 file2"
echo "Only file names are allowed."
exit 1
fi
TEMP=`mktemp --tmpdir=.`
mv $1 ${TEMP}
mv $2 $1
mv ${TEMP} $2
exit 0
现在将其放入主目录下的 bin 目录中。确保您的 PATH 变量选择此主目录echo $PATH
。如果没有,则 PATH 在您的 shell 初始化资源(.bashrc 或 .cshrc 或 ???)中设置。
cd
mkdir bin
nano swap
< now paste the above script into the file, save, and exit>
chmod 755 swap
nano $HOME/.bashrc
< now add the following 2 lines at the end of the file, save, and exit>
# user specific pathing
PATH="$HOME/bin:$PATH"
现在您可以启动一个新的 bash shell,或者重新处理 .bashrc 文件:
source .bashrc
新的登录或 shell 应该是自动的。
就是这样。仅使用 swap 命令进行测试,您就会看到使用文本。