如果我的术语不正确,请提供帮助,请原谅。
我要做的是写一个scrpit / .bat文件,它将执行以下操作:
将1个目录(和子目录)从pointA复制到B点。
然后在pointB(和子目录)中解压缩将提供* .csv文件的文件
然后在pointB(和子目录)中我想从所有这些csv文件中删除一些行
这个在cygwin上运行的unix命令会将/ cygdrive / v / pointA / *中的所有文件复制到当前目录。 (即点是当前的工作目录)
cp /cygdrive/v/pointA/* .
这个在cygwin上运行的unix命令将遍历以.zip结尾的目录和子目录中的所有文件。 并解压缩它们
find -iname *.zip -execdir unzip {} \;
这个在cygwin上运行的unix命令将遍历以.csv结尾的目录和子目录中的所有文件
对于每个文件,它删除前6行和最后一行,这是返回的文件。
find ./ -iname '*.csv' -exec sed -i '1,6d;$ d' '{}' ';'
我希望在一个脚本/ bat文件中执行此操作,但我遇到第一个find命令时遇到问题 我在一行上查找和解压缩命令时遇到问题,我想知道如何以及如何做到这一点
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'
有人可以建议是否/如何做到这一点?
答案 0 :(得分:1)
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脚本可能如下所示:(未经测试)
#!/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 {} \;