Bash How to execute a command for files in two directories
我知道这个bash代码用于对一个目录中的所有文件执行操作:
1 2 | for files in dir/*.ext; do cmd option"${files%.*}.ext" out"${files%.*}.newext"; done |
但现在,我必须对一个目录中的所有文件执行一个操作,其中另一个目录中的所有文件都具有相同的文件名,但扩展名不同。例如
1 2 3 4 5 | directory 1 -> file1.txt, file2.txt, file3.txt directory 2 -> file1.csv, file2.csv, file3.csv cmd file1.txt file1.csv > file1.newext cmd file2.txt file2.csv > file2.newext |
我不能比较两个文件,但是我必须执行的脚本需要两个文件来生成另一个文件(特别是我必须执行
你能帮我吗?
谢谢你的回答!
在使用变量操作的bash中:
1 2 3 4 | $ for f in test/* ; do t="${f##*/}"; echo"$f" test2/"${t%.txt}".csv ; done test/file1.txt test2/file1.csv test/file2.txt test2/file2.csv test/file3.txt test2/file3.csv |
编辑:
执行@davidc.rankin的保险建议:
1 2 3 4 5 6 7 8 9 10 11 12 13 | $ touch test/futile for f in test/* do t="${f##*/}" t="test2/${t%.txt}".csv if [ -e"$t" ] then echo"$f""$t" fi done test/file1.txt test2/file1.csv test/file2.txt test2/file2.csv test/file3.txt test2/file3.csv |
尝试:
1 2 3 4 | for file in path_to_txt/*.txt; do b=$(basename $file .txt) cmd path_to_txt/$b.txt path_to_csv/$b.csv done |
- 如果此命令不需要路径,则不要在对"cmd"的调用中包含这些路径。
- 如果在.txt文件目录下运行,则"for"语句不能包含路径。
- 如果需要执行时间,可以用posix regexp替换basename。请参阅此处https://stackoverflow.com/a/2664746/4886927