我能够找到目录及其子目录中的所有文件。我将它保存到一个数组中,但我还需要将名称中包含空格的那些重命名为下划线。
./abc 123.txt
./dags/ftp.pyc
./dags/ftp.py
./logs/scheduler/2017-05-12/ftp.py.log
array=($(find . -type f -print0 | xargs -0))
# Does not work
for i in ${array[@]};do echo ${i// /_};done
#Output
./abc
123.txt
./dags/ftp.pyc
./dags/ftp.py
./logs/scheduler/2017-05-12/ftp.py.log
如果我可以在进入数组之前对该值运行正则表达式,那将更为理想。
答案 0 :(得分:0)
上述命令的问题在于数组循环遍历文件名,空格为两个变量而不是一个变量。 像下面的东西应该工作
find . -type f -print0 | while IFS= read -r -d '' file; do echo ${file// /_} ; done