我有多个文件夹,并且每个文件夹中的文件名为“ 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/
答案 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/
对不起,我的英语不好。