Ale*_*lls 1 bash shell-script touch
我想触摸目录中的每个文件:
files=$(ls -a "node_modules/suman-types/dts")
echo "files $files";
for file in "$files"; do
echo "touching file $file";
touch "node_modules/suman-types/dts/$file";
done
Run Code Online (Sandbox Code Playgroud)
但运行后,我得到:
inject.d.ts
injection.d.ts
integrant-value-container.d.ts
it.d.ts
reporters.d.ts
runner.d.ts
suman-utils.d.ts
suman.d.ts
table-data.d.ts
test-suite-maker.d.ts
test-suite.d.ts: File name too long
Run Code Online (Sandbox Code Playgroud)
“文件名太长”消息是关于什么的?
我把我的脚本改成这样:
files=$(find "node_modules/suman-types/dts" -name "*.d.ts")
for file in "$files"; do
echo "touching file $file";
touch "$file";
done
touch "node_modules/suman-types"
Run Code Online (Sandbox Code Playgroud)
但后来我得到了这个:
$ ./types-touch.sh
touching file node_modules/suman-types/dts/after-each.d.ts
node_modules/suman-types/dts/after.d.ts
node_modules/suman-types/dts/before-each.d.ts
node_modules/suman-types/dts/before.d.ts
node_modules/suman-types/dts/describe.d.ts
node_modules/suman-types/dts/global.d.ts
node_modules/suman-types/dts/index-init.d.ts
node_modules/suman-types/dts/inject.d.ts
node_modules/suman-types/dts/injection.d.ts
node_modules/suman-types/dts/integrant-value-container.d.ts
node_modules/suman-types/dts/it.d.ts
node_modules/suman-types/dts/reporters.d.ts
node_modules/suman-types/dts/runner.d.ts
node_modules/suman-types/dts/suman-utils.d.ts
node_modules/suman-types/dts/suman.d.ts
node_modules/suman-types/dts/table-data.d.ts
node_modules/suman-types/dts/test-suite-maker.d.ts
node_modules/suman-types/dts/test-suite.d.ts
touch: node_modules/suman-types/dts/after-each.d.ts
node_modules/suman-types/dts/after.d.ts
node_modules/suman-types/dts/before-each.d.ts
node_modules/suman-types/dts/before.d.ts
node_modules/suman-types/dts/describe.d.ts
node_modules/suman-types/dts/global.d.ts
node_modules/suman-types/dts/index-init.d.ts
node_modules/suman-types/dts/inject.d.ts
node_modules/suman-types/dts/injection.d.ts
node_modules/suman-types/dts/integrant-value-container.d.ts
node_modules/suman-types/dts/it.d.ts
node_modules/suman-types/dts/reporters.d.ts
node_modules/suman-types/dts/runner.d.ts
node_modules/suman-types/dts/suman-utils.d.ts
node_modules/suman-types/dts/suman.d.ts
node_modules/suman-types/dts/table-data.d.ts
node_modules/suman-types/dts/test-suite-maker.d.ts
node_modules/suman-types/dts/test-suite.d.ts: No such file or directory
Run Code Online (Sandbox Code Playgroud)
Jef*_*ler 10
您的问题源于将所有ls输出捕获到名为files. 变量看起来像:
filename1\nfilename2\nfilename3\n...
Run Code Online (Sandbox Code Playgroud)
自己看看:
echo "$files" | od -c
Run Code Online (Sandbox Code Playgroud)
你真正在做的是在一个非常长的字符串上循环一次,该字符串对应于一个不存在的文件。你得到的错误信息有点多——它告诉你这个长的文件名字符串不存在。
要访问目录中的每个文件,只需使用 shell globbing 并运行touch:
touch node_modules/suman-types/dts/*
Run Code Online (Sandbox Code Playgroud)
或一一触摸:
for file in node_modules/suman-types/dts/*; do touch "$file"; done
Run Code Online (Sandbox Code Playgroud)
或找到它们并触摸它们:
find node_modules/suman-types/dts -type f -exec touch -- {} \;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19593 次 |
| 最近记录: |