gpt4 book ai didi

shell - Unix for 循环跳过脚本中的一个值,在命令行中正常工作

转载 作者:行者123 更新时间:2023-12-02 02:13:46 25 4
gpt4 key购买 nike

我在命令行中运行以下命令:

for DATAFILE in `find dir_name -type f -mtime +10 | egrep -v -e 'archive/'`
do
echo 'Data file name- ' "$DATAFILE"
echo 'Base name '
BASENAME=`basename "${DATAFILE}"`
DESTFILE="${BASENAME}"_`date +"%Y%m%d%H%M%S"`
echo "Dest file - "$DESTFILE
done

我得到以下结果:

Data file name-  DIR_PATH_1/file_1.txt
Base name
Dest file - file_1.txt_20120719041239
Data file name- DIR_PATH_2/file_2.txt
Base name
Dest file - file_2.txt_20120719041239

当我将相同的命令放入 shell 脚本并执行时,我得到以下结果:

Data file name-  DIR_PATH_1/file_1.txt
DIR_PATH_2/file_2.txt
Base name
Dest file - file_2.txt_20120719040956

我已经检查了 Control-M 和其他垃圾字符的脚本。此外,我在 shell 脚本中没有任何额外的步骤(没有参数和所有)。

谁能给我指出正确的方向。

谢谢。

更新 1:

我对循环进行了以下更改:

早些时候:

for DATAFILE in `find ${ROOT_DIR} -type f -mtime +$DAYS_ARCH | 
egrep -v -e 'archive/'`

现在:

find ${ROOT_DIR} -type f -mtime +$DAYS_ARCH |
egrep -v -e 'archive/' | while read DATAFILE

它现在似乎工作正常。我仍在测试以确认这一点。

更新 2:

将 FOR 循环更改为 WHILE 循环已解决此问题。但我仍然无法理解为什么会这样。有人吗?

最佳答案

在反引号中捕获 find 输出将有效地连接所有行。这将破坏带有嵌入空格的文件名。

对于 中的数据文件,找到 ${ROOT_DIR} -type f -mtime +$DAYS_ARCH |
egrep -v -e '存档/'

while read ... 循环将一次只读取一个路径名,即使它们包含空格或其他特殊字符也是如此。

关于shell - Unix for 循环跳过脚本中的一个值,在命令行中正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11556656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com