Bash 在批处理文件的同一行中运行2个unix命令

Bash 在批处理文件的同一行中运行2个unix命令,bash,csv,cygwin,Bash,Csv,Cygwin,A非常感谢您的帮助,如果我的术语不正确,请原谅 我正在尝试编写一个scrpit/.bat文件,该文件将执行以下操作: 将1个目录(和子目录)从点A复制到点B。 然后在pointB(和子目录)中解压将提供*.csv文件的文件 然后在pointB(和子目录)中,我想从所有这些csv文件中删除一些行 此unix命令在cygwin上运行,将把所有文件从/cygdrive/v/pointA/*复制到当前目录。(即点为当前工作目录) 这个在cygwin上运行的unix命令将遍历目录和以.zip结尾的子目录中

A非常感谢您的帮助,如果我的术语不正确,请原谅

我正在尝试编写一个scrpit/.bat文件,该文件将执行以下操作:
将1个目录(和子目录)从点A复制到点B。
然后在pointB(和子目录)中解压将提供*.csv文件的文件
然后在pointB(和子目录)中,我想从所有这些csv文件中删除一些行

此unix命令在cygwin上运行,将把所有文件从/cygdrive/v/pointA/*复制到当前目录。(即点为当前工作目录)

这个在cygwin上运行的unix命令将遍历目录和以.zip结尾的子目录中的所有文件 然后把它们解开

find -iname *.zip -execdir unzip {} \;
此unix命令在cygwin上运行,将遍历目录和子目录中以.csv结尾的所有文件
对于每个文件,它删除前6行和最后一行,这就是返回的文件

find ./ -iname '*.csv' -exec sed -i '1,6d;$ d' '{}' ';'
我希望在一个script/bat文件中执行此操作,但第一个find命令遇到了问题 我在一行中使用find和unzip命令时遇到问题,我想知道如何以及是否可以做到这一点

chdir C:\pointA
C:\cygwin\bin\cp.exe /cygdrive/v/pointB/* .
::find -iname *.zip -execdir unzip {} \;
::find ./ -iname '*.csv' -exec sed -i '1,6d;$ d' '{}' ';' 
我确实试过这样的方法:

C:\cygwin\bin\find.exe -iname *.zip -execdir C:\cygwin\bin\unzip.exe {} \;  
但我得到了以下信息:

/usr/bin/find: missing argument to `-execdir'

有人能建议是否/如何做到这一点吗?

Cygwin工具使用自己的路径,例如
/cygdrive/c/Cygwin/bin/unzip.exe
尽管有时带有反斜杠的Windows路径可以工作,但反斜杠确实会混淆Cygwin工具

我强烈建议您使用Bash shell脚本编写工具,而不是使用cmd.exe Windows批处理文件。根据我的经验,(1)在bash脚本中进行流控制比在批处理文件中容易得多,(2)Cygwin环境在bash中工作得更好。您可以打开bash shell并运行
bash-yourscript.sh

您的Bash脚本可能如下所示:(未经测试)


tks。我对bash shell是新手,所以我会探索这个选项(但欢迎使用特定的指针),但我实际上对使用我已有的命令进行操作感兴趣/希望,但我的经验可能会显示出来。是的,你可以从一行bash脚本开始,然后添加到它,直到它成为一个强大的程序。通常,一旦一个shell脚本的长度达到4个屏幕或更多,我希望改用Python编写它,但从来没有一次希望我用Windows cmd.exe批处理脚本编写它。@ColinDBennett tks,但我甚至不能让cd命令工作。我得到以下信息:“$bash CopyFilesBash.sh CopyFilesBash.sh:第6行:$'\r':找不到命令CopyFilesBash.sh:第9行:$'\r':找不到命令'@HattrickNZ bash通常不喜欢具有CRLF(DOS样式)行结尾的脚本。尝试使用
dos2unix CopyFilesBash.sh
dos2unix--d2u CopyFilesBash.sh
转换行尾。记事本不支持LF行结尾,因此请确保使用更好的文本编辑器来编辑scripts.tks,尽管不确定这是否是问题所在,但了解它很有用。但是基本的cd可以用了,剩下的就可以用了
/usr/bin/find: missing argument to `-execdir'
#!/bin/bash
# This script would be run from a Cygwin Bash shell.
# You can use the Mintty program or run C:\cygwin\bin\bash --login
# to start a bash shell from Windows Command Prompt.

# Configure bash so the script will exit if a command fails.
set -e 

cd /cygdrive/c/pointA
cp /cygdrive/v/pointB/* .

# I did try something like this:

# 1. Make sure you quote wildcards so the shell doesn't expand them
#    before passing them to the 'find' program.
#
# 2. If you start bash with the --login option, the PATH will be
#    configured so that C:\cygwin\bin is in your PATH, and you can
#    just call 'find', 'cp' etc. without specifying full path to it.

# This will unzip all .zip files in all subdirectories under this one.
find -iname '*.zip' -execdir unzip {} \;