从多个文件夹移动txt文件并重命名

时间:2018-09-07 20:35:09

标签: linux ubuntu

我有多个文件夹,并且每个文件夹中的文件名为“ tabled_output.tab”。我想将此文件移到新文件夹中,并使用原始文件夹名称重命名该文件。我需要循环运行以移动所有“ tabled_output.tab”文件。

这是我到目前为止所拥有的:

 cd /storage/home/iul116/.ssh/poblacionesmaices/inputfiles_osr/Output/
 ls > razas.txt
 cd /storage/home/iul116/.ssh/poblacionesmaices/inputfiles_osr/Output/(x)
 mv tabled_output.tab (x)
 mv (x) /storage/home/iul116/.ssh/poblacionesmaices/inputfiles_osr/Results/

2 个答案:

答案 0 :(得分:1)

以下Bash脚本可能会有所帮助。它应该在包含要移动文件的文件夹的父目录中运行。

DESTDIR=tables
FILENAME=tabled_output.tab

mkdir -p $DESTDIR # -p flag => skip if directory already exists

# Search all folders in the current directory
for dir in `ls -d */`; do
    dir=${dir/\/} # remove trailing slash
    TMPNAME=$dir/$FILENAME # destination file
    # Check if a file called 'tabled_output.tab' exists
    # in the relevant sub-directory
    if [ -e $TMPNAME ]; then
        # If so, move it to the destination directory
        mv $TMPNAME $DESTDIR/$dir.tab
    fi
done

更新:不理想的是使用ls -d */来检索子文件夹列表-正如评论中提到的Stephen P。

答案 1 :(得分:1)

您可以使用一个命令来完成它:

system

此脚本在输出文件夹内的每个文件夹中搜索并移动(如果存在) 将文件tabled_output.tab放入文件夹Results(必须提供此文件夹的绝对路径)。将该文件的名称更改为包含该文件的文件夹的名称。

对于您而言,我相信它可以使用:

find "<PATH_TO_OUTPUT>" -name "*" -type d -print -exec bash -c 'cd "$1";current_dir=${PWD##*/};mv tabled_output.tab <PATH_TO_RESULTS>"$current_dir".tab' -- {} \;

<PATH_TO_OUTPUT> = /storage/home/iul116/.ssh/poblacionesmaices/inputfiles_osr/Output/

对不起,我的英语不好。