我可以避免在 cp -i 中输入键吗?

我可以避免在 cp -i 中输入键吗?

我经常需要使用 或类似的方法有选择地归档一长串文件cp -iar,为了加快这个过程,我想只按一个键,而不是按一个键,y而不是在每个文件上n按一个键。ENTER换句话说,我想避免必须按ENTER以及yn。当然,我很乐意使用不同的键来代替yn

有没有办法做到这一点?

答案1

我认为你需要的是一个文件管理器,比如午夜指挥官。在mc中可以用insert或 + 来选择多个文件并对其进行删除、移动或复制等操作。完整的说明和提示可以在教程

如果您尝试纯 shell 命令(无 GUI),假设您有 file0 到 file10,但只想复制 file1 和 file3:

cp file1 file3 directory/

当然,你可以使用 shell 来帮助自己:

cp file{1,3} directory/

但是连续的呢?文件 5 到文件 10?

cp file{5..10} directory/

如果您想要更高级的东西,您也可以使用findto help,例如:

find Downloads -name "*.cfg" -exec cp {} directory \;

会这样做:

copy Downloads/file(6).cfg to directory
copy Downloads/file(7).cfg to directory
copy Downloads/file(1).cfg to directory
copy Downloads/file.cfg to directory
copy Downloads/file(2).cfg to directory
copy Downloads/file(4).cfg to directory
copy Downloads/file(3).cfg to directory
copy Downloads/file(5).cfg to directory

您可以验证要复制的文件,删除该-exec ...部分。-exec echo cp ...如果您想知道 find 的用途,也可以使用。

答案2

是的,可以,但是有点复杂。
在这里,我建议您使用这个 bash 脚本,将其保存到一个名为mycp.sh要放入您的 PATH 中的文件中,并且不要忘记chmod +x mycp..显然它需要一些改进!

#!/bin/bash
[ $# -ne 2 ] && echo -en "ERROR : Need 2 parameters.\n" && exit
[ -f $1 ] && cp $1 $2
if [ -d $1 ]  
then
    mkdir -p $2
    cd $1
    find . | while read fn
    do
        if [ -f $fn ] 
        then
            read -r -n1 yesorno
            if [ "$yesorno" == "y" ] || [ "$yesorno" == "Y" ]  
            then 
                mkdir -p $2/`dirname $fn`
                cp $fn $2/`dirname $fn`
            fi
        fi
    done
fi

答案3

在这种情况下,如果我不想按后跟yEnter我会从上一行复制(Ctrl+ Shift+C在我的终端设置中)y+ 换行符一次,然后在出现提示时粘贴(Ctrl+ Shift+ V)。

这不是一个按键,而是我可以一次性按下的按键,这对我来说已经足够了。在等待下一个提示时可以按住Ctrl+ 。Shift

答案4

基于readSlyx 的调用,下面是一个简单的单行代码:

{ while read -r -n1 i; do echo >&2; echo $i; done } | cp -iar …

您必须在最后按Ctrl+才能退出循环。D到目前为止,我还没有找到在命令完成后退出循环的神奇方法;陷阱SIGCHLD似乎并没有像我希望的那样起作用。如果将其保存到路径上调用的文件中yesorno,则可以像这样编写:

#!/bin/bash
{ while read -r -n1 i; do echo >&2; echo $i; done } | "$@"

作为替代方案,您可以将其作为您的函数定义~/.bash_profile

yesorno() {
  { while read -r -n1 i; do echo >&2; echo $i; done } | "$@"
}

无论哪种情况,您都可以像这样调用它:

yesorno cp -iar …

相关内容